Changeset 3248


Ignore:
Timestamp:
07/11/08 13:48:24 (5 years ago)
Author:
moschny
Message:

Use Genshi to create tags instead of emitting plain HTML.
This should also fix #284.

Location:
trac/plugins/tracnav-0.11/tracnav
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trac/plugins/tracnav-0.11/tracnav/__init__.py

    r3245 r3248  
    1 __version__ = '4.0pre6' 
     1__version__ = '4.0pre7' 
  • trac/plugins/tracnav-0.11/tracnav/tracnav.py

    r3245 r3248  
    6363from trac.wiki.model import WikiPage 
    6464from trac.wiki.formatter import Formatter, OneLinerFormatter 
     65from trac.util.html import Markup 
     66from genshi.builder import tag 
    6567from StringIO import StringIO 
    6668 
     
    107109class Invocation(object): 
    108110 
    109     def __init__(self, formatter, args, out): 
     111    def __init__(self, formatter, args): 
    110112 
    111113        # shortcuts 
     
    114116        self.ctx = formatter.context 
    115117 
    116         # output 
    117         self.out = out 
    118         self.col = 0 
    119          
    120118        # needed several times 
    121119        self.preview = self.req.args.get('preview', '') 
     
    205203        return toc 
    206204 
    207     def write(self, what): 
    208         self.out.write(' ' * self.col) 
    209         self.out.write(what) 
    210         return self 
    211  
    212     def indent_more(self): 
    213         self.col += 1 
    214         return self 
    215  
    216     def indent_less(self): 
    217         self.col -= 1 
    218         return self 
    219  
    220205    def run(self): 
    221206        """ 
    222207        Main routine of the wiki macro. 
    223208        """ 
     209        out = tag.div(class_="wiki-toc trac-nav") 
     210 
    224211        # header 
    225         self.write('<div class="wiki-toc trac-nav">\n').indent_more() 
    226         self.write('<h2><a href="%s">TracNav</a> menu</h2>\n' % TRACNAVHOME) 
     212        out.append(tag.h2(tag.a("TracNav", href=TRACNAVHOME))) 
    227213 
    228214        # add TOCs 
     
    233219            found, filtered = self.filter_toc(toc) 
    234220            if (not self.collapse) or (not found): 
    235                 self.display_all(name, toc) 
    236             else: 
    237                 self.display_all(name, filtered) 
    238  
    239         # footer 
    240         self.indent_less().write('</div>\n') 
     221                self.display_all(name, toc, out) 
     222            else: 
     223                self.display_all(name, filtered, out) 
    241224 
    242225        # add our stylesheet 
    243226        add_stylesheet(self.req, 'tracnav/css/tracnav.css') 
     227 
     228        # done 
     229        return out 
    244230 
    245231    def filter_toc(self, toc, level = 0): 
     
    262248        return found, result 
    263249 
    264     def display_all(self, name, toc): 
     250    def display_all(self, name, toc, out): 
    265251        if (not self.preview) and (self.modify): 
    266             self.write('<div class="edit"><a href="%s?action=edit">edit</a></div>\n' % \ 
    267                 self.req.href.wiki(name)) 
    268         self.write('<ul>\n').indent_more() 
    269         self.display(toc, 0) 
    270         self.indent_less().write('</ul>\n') 
    271  
    272     def display(self, toc, depth): 
     252            out.append(tag.div( 
     253                    tag.a("edit", href="%s?action=edit" % self.req.href.wiki(name)), 
     254                    class_="edit")) 
     255        ul = tag.ul() 
     256        self.display(toc, 0, ul) 
     257        out.append(ul) 
     258 
     259    def display(self, toc, depth, ul): 
    273260        for name, title, sub in toc: 
    274             li_style = ' style="padding-left: %dem;"' % (depth + 1) 
     261            style = "padding-left: %dem;" % (depth + 1) 
    275262            if sub == None: 
    276                 if name == self.curpage: 
    277                     cls = ' class="active"' 
    278                 else: 
    279                     cls = '' 
    280                 self.write('<li%s%s>%s</li>\n' % (li_style, cls, title)) 
    281             else: 
    282                 self.write('<li%s>\n' % li_style).indent_more() 
    283                 if name == None or sub: 
    284                     self.write('<h4>%s</h4>\n' % title) 
    285                 else: 
    286                     self.write('<h4>%s...</h4>\n' % title) 
    287                 self.indent_less().write('</li>\n') 
     263                ul.append(tag.li( 
     264                        Markup(title), 
     265                        style=style, 
     266                        class_= (name == self.curpage) and "active" or None)) 
     267            else: 
     268                ul.append(tag.li( 
     269                        tag.h4(Markup(title), (name == None or sub) and "..." or None), 
     270                        style=style)) 
    288271                if len(sub) > 0: 
    289                     self.display(sub, depth + 1) 
     272                    self.display(sub, depth + 1, ul) 
    290273 
    291274 
     
    299282 
    300283    def expand_macro(self, formatter, name, args): 
    301         out = StringIO() 
    302         Invocation(formatter, args, out).run() 
    303         return out.getvalue() 
     284        return Invocation(formatter, args).run() 
    304285 
    305286    def get_macro_description(self, name): 
Note: See TracChangeset for help on using the changeset viewer.