Ticket #264: irequestfilter.diff

File irequestfilter.diff, 1.7 KB (added by anonymous, 7 years ago)

Patch to add IRequestFilter to TracNav plugin

  • tracnav/tracnav.py

     
    6262from trac.core import Component, implements 
    6363from trac.wiki.api import WikiSystem, IWikiMacroProvider 
    6464from trac.web.chrome import ITemplateProvider, add_stylesheet 
     65from trac.web.main import IRequestFilter 
    6566from trac.wiki.model import WikiPage 
    6667from trac.wiki.formatter import Formatter, OneLinerFormatter 
    6768from StringIO import StringIO 
     
    292293 
    293294class TracNav(Component): 
    294295 
    295     implements(IWikiMacroProvider, ITemplateProvider) 
     296    implements(IWikiMacroProvider, ITemplateProvider, IRequestFilter) 
    296297 
     298    # IWikiMacroProvider methods 
    297299    def get_macros(self): 
    298300        yield 'TracNav' 
    299301        yield 'JPNav' # legacy 
     
    307309        from inspect import getdoc, getmodule 
    308310        return getdoc(getmodule(self)) 
    309311 
     312 
     313    # ITemplateProvider methods 
    310314    def get_htdocs_dirs(self): 
    311315        from pkg_resources import resource_filename 
    312316        return [('tracnav', resource_filename(__name__, 'htdocs'))] 
     
    314318    def get_templates_dirs(self): 
    315319        # we don't provide templates 
    316320        return [] 
     321 
     322 
     323    # IRequestFilter methods 
     324    def pre_process_request(self, req, handler): 
     325        return handler 
     326 
     327    def post_process_request(self, req, template, content_type): 
     328        if req.path_info == '/' or \ 
     329          req.path_info.startswith('/wiki'): 
     330            self._do_post_process(req) 
     331        return template, content_type 
     332 
     333    def _do_post_process(self, req): 
     334        out = StringIO() 
     335        Invocation(self.env, req, '', out).run() 
     336        req.hdf.setValue('tracnavplugin.toc', out.getvalue())