Changeset 4360
- Timestamp:
- 09/30/08 05:20:25 (3 months ago)
- Files:
-
- menusplugin/0.11/tracmenus/web_ui.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
menusplugin/0.11/tracmenus/web_ui.py
r4313 r4360 3 3 # Copyright 2008 Optaros, Inc. 4 4 # 5 import re 5 6 6 7 from trac.core import * 7 8 from trac.web.api import IRequestFilter 8 9 from trac.web.chrome import add_script, add_stylesheet,ITemplateProvider 9 from trac.config import ListOption 10 from trac.config import ListOption, BoolOption 10 11 from trac.util.html import html 11 12 from trac.util.compat import sorted … … 13 14 class MenuManagerModule(Component): 14 15 implements(IRequestFilter, ITemplateProvider) 15 managed_menus = ListOption('menu-custom', 'managed_menus', 'mainnav,metanav', sep=',',doc=""" """) 16 16 managed_menus = ListOption('menu-custom', 'managed_menus', 'mainnav,metanav', sep=',', doc=""" """) 17 serve_ui_files = BoolOption('menu-custom', 'serve_ui_files', 'true') 18 17 19 # ITemplateProvider 18 20 def get_templates_dirs(self): … … 27 29 def post_process_request(self, req, template, data, content_type): 28 30 req.chrome['nav_orig'] = req.chrome['nav'].copy() 31 if 'ctxtnav' in self.managed_menus and 'ctxtnav' in req.chrome: 32 req.chrome['nav_orig']['ctxtnav']=[dict(name='ctxtnav_'+str(idx), label=ctx_label) 33 for idx, ctx_label in enumerate(req.chrome['ctxtnav'])] 29 34 for menu_name in self.managed_menus: 30 35 req.chrome['nav'][menu_name] = list(self._get_menu(req, menu_name, 31 req.chrome['nav_orig'].get(menu_name,[]))) 32 add_script(req, 'tracmenus/js/superfish.js') 33 add_script(req, 'tracmenus/js/tracmenus.js') 34 add_script(req, 'tracmenus/js/jquery.hoverIntent.minified.js') 35 add_stylesheet(req, 'tracmenus/css/superfish.css') 36 req.chrome['nav_orig'])) 37 if menu_name=='ctxtnav': 38 req.chrome['ctxtnav'] = [ ctxt_item.get('label') for ctxt_item in req.chrome['nav'][menu_name] ] 39 40 if self.serve_ui_files: 41 add_script(req, 'tracmenus/js/superfish.js') 42 add_script(req, 'tracmenus/js/tracmenus.js') 43 add_script(req, 'tracmenus/js/jquery.hoverIntent.minified.js') 44 add_stylesheet(req, 'tracmenus/css/superfish.css') 36 45 return template, data, content_type 37 46 38 def _get_menu(self, req, menu_name, menu_orig): 39 config_menu = self._get_config_menus(req, menu_name) 47 def _get_menu(self, req, menu_name, nav_orig): 48 config_menu, config_options = self._get_config_menus(req, menu_name) 49 menu_orig = nav_orig.get(menu_name, []) 50 51 if 'inherit' in config_options: 52 menu_orig += nav_orig.get(config_options['inherit'], []) 53 40 54 tree_menu={} 41 55 for option in sorted(menu_orig+[{'name':key} for key in config_menu.keys()], 42 56 key=lambda x:config_menu.get(x['name'],{}).get('order','0')): 43 if 'visited' in tree_menu.get(option['name'],[]) or config_menu.get(option['name'],{}).get('enabled', True)==False: 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: 44 60 continue 45 61 name=option['name'] … … 74 90 def _get_config_menus(self, req, menu_name): 75 91 new_menu_option=lambda name: dict(name=name, parent_name='top') 76 menu ={}92 menu, options = {}, {} 77 93 for option, value in self.config[menu_name].options(): 78 94 item_parts = option.split('.',1) 79 95 name, prop_name = item_parts[0], len(item_parts)>1 and item_parts[1] or 'enabled' 96 if name in ['inherit']: 97 options[name] = value 98 continue 80 99 menu.setdefault(name, new_menu_option(name)) 81 100 if prop_name=='parent': … … 85 104 value=self.config[menu_name].getbool(option, True) 86 105 elif prop_name=='href': 106 value = value.replace('$PATH_INFO', req.path_info) 87 107 menu[name]['label']=menu[name].setdefault('label', html.a())(href=value.startswith('/') and req.href()+value or value) 88 108 elif prop_name=='label': 89 109 menu[name].setdefault('label', html.a())(value) 90 110 continue 111 elif prop_name=='path_info': 112 menu[name]['if_path_info'] = re.match(value, req.path_info) and True or False 91 113 menu[name][prop_name]=value 92 return menu 114 return menu, options
