Ticket #264: irequestfilter-2.diff
| File irequestfilter-2.diff, 3.3 kB (added by mrenzmann@otaku42.de, 6 years ago) |
|---|
-
tracnav/tracnav.py
old new 62 62 from trac.core import Component, implements 63 63 from trac.wiki.api import WikiSystem, IWikiMacroProvider 64 64 from trac.web.chrome import ITemplateProvider, add_stylesheet 65 from trac.web.main import IRequestFilter, RequestDispatcher 65 66 from trac.wiki.model import WikiPage 66 67 from trac.wiki.formatter import Formatter, OneLinerFormatter 67 68 from StringIO import StringIO … … 71 72 LISTRULE = re.compile(r"^(?P<indent>[ \t\v]+)\* +(?P<rest>.*)$", re.M) 72 73 ALLOWED_MACROS = ["image"] 73 74 75 class PseudoRequest(object): 76 args = None 77 hdf = None 78 authname = None 79 perm = None 80 session = None 81 path_info = None 82 83 def __init__(self, path): 84 self.path_info = path 74 85 75 86 class TocFormatter(OneLinerFormatter): 76 87 """ … … 115 126 116 127 #save for later use 117 128 self.env = env 129 self.config = env.config 118 130 self.req = req 119 131 self.out = out 120 132 self.col = 0 … … 223 235 self.write('<h2><a href="%s">TracNav</a> menu</h2>\n' % TRACNAVHOME) 224 236 225 237 # add TOCs 226 for name in (self.names or ["TOC"]): 238 tocpages = self.config.get('tracnav', 'tocpages', 'TOC').split(',') 239 for name in (self.names or tocpages): 227 240 toc = self.parse_toc(self.get_toc(name)) 228 241 if not toc: 229 242 toc = self.parse_toc(' * TOC "%s" is empty!' % name) … … 292 305 293 306 class TracNav(Component): 294 307 295 implements(IWikiMacroProvider, ITemplateProvider )308 implements(IWikiMacroProvider, ITemplateProvider, IRequestFilter) 296 309 310 # IWikiMacroProvider methods 297 311 def get_macros(self): 298 312 yield 'TracNav' 299 313 yield 'JPNav' # legacy … … 307 321 from inspect import getdoc, getmodule 308 322 return getdoc(getmodule(self)) 309 323 324 325 # ITemplateProvider methods 310 326 def get_htdocs_dirs(self): 311 327 from pkg_resources import resource_filename 312 328 return [('tracnav', resource_filename(__name__, 'htdocs'))] … … 314 330 def get_templates_dirs(self): 315 331 # we don't provide templates 316 332 return [] 333 334 335 # IRequestFilter methods 336 def pre_process_request(self, req, handler): 337 return handler 338 339 def post_process_request(self, req, template, content_type): 340 status = self.config.get('tracnav', 'request_filter', 'disabled') 341 if status == 'enabled': 342 paths = self.config.get('tracnav', 'match', '').split(',') 343 344 if req.path_info == '/': 345 dispatcher = RequestDispatcher(self.env) 346 default_handler = dispatcher.default_handler 347 348 for path in paths: 349 pseudo_req = PseudoRequest(path) 350 if default_handler.match_request(pseudo_req): 351 self._do_post_process(req) 352 break 353 else: 354 for path in paths: 355 if req.path_info.startswith(path): 356 self._do_post_process(req) 357 break 358 359 return template, content_type 360 361 def _do_post_process(self, req): 362 out = StringIO() 363 Invocation(self.env, req, '', out).run() 364 req.hdf.setValue('tracnavplugin.toc', out.getvalue())
