Edgewall Software

Ticket #2703: ticket_comment_link.diff

File ticket_comment_link.diff, 4.1 KB (added by cboos, 3 years ago)

Permalinks to ticket comments, plus a wiki syntax for linking to them (comment:<number> or comment:ticket:<id>:<number>). Patch on r2975.

  • htdocs/css/trac.css

     
    4242 color: inherit; 
    4343} 
    4444 
     45/* Heading anchors */ 
     46.anchor:link, .anchor:visited { 
     47 border: none; 
     48 color: #d7d7d7; 
     49 font-size: .8em; 
     50 vertical-align: text-top; 
     51 visibility: hidden; 
     52} 
     53h1:hover .anchor, h2:hover .anchor, h3:hover .anchor, 
     54h4:hover .anchor, h5:hover .anchor, h6:hover .anchor { 
     55 visibility: visible; 
     56} 
     57 
    4558@media screen { 
    4659 a.ext-link .icon { 
    4760  background: url(../extlink.gif) left center no-repeat; 
  • htdocs/css/wiki.css

     
    2222#overview .ipnr { color: #999; font-size: 80% } 
    2323#overview .comment { padding: 1em 0 0 } 
    2424 
    25 /* Heading anchors */ 
    26 .anchor:link, .anchor:visited { 
    27  border: none; 
    28  color: #d7d7d7; 
    29  font-size: .8em; 
    30  vertical-align: text-top; 
    31  visibility: hidden; 
    32 } 
    33 h1:hover .anchor, h2:hover .anchor, h3:hover .anchor, 
    34 h4:hover .anchor, h5:hover .anchor, h6:hover .anchor { 
    35  visibility: visible; 
    36 } 
    37  
    3825/* Styles for the page history table 
    3926   (extends the styles for "table.listing") */ 
    4027#wikihist td { padding: 0 .5em } 
  • trac/ticket/api.py

     
    146146 
    147147    def get_link_resolvers(self): 
    148148        return [('bug', self._format_link), 
    149                 ('ticket', self._format_link)] 
     149                ('ticket', self._format_link), 
     150                ('comment', self._format_comment_link)] 
    150151 
    151152    def get_wiki_syntax(self): 
    152153        yield ( 
     
    174175            return '<a class="missing ticket" href="%s" rel="nofollow">%s</a>' \ 
    175176                   % (formatter.href.ticket(target), label) 
    176177 
     178    def _format_comment_link(self, formatter, ns, target, label): 
     179        href = None 
     180        if ':' in target: 
     181            elts = target.split(':') 
     182            if len(elts) == 3: 
     183                type, id, comment_number = elts 
     184                if type == 'ticket': 
     185                    href = formatter.href(type, id) 
     186        else: 
     187            # FIXME: the formatter should know which object the text being 
     188            #        formatter belongs to 
     189            type, id = 'wiki', 'WikiStart' 
     190            if formatter.req: 
     191                path_info = formatter.req.path_info.split('/', 2) 
     192                if len(path_info) > 1: 
     193                    type = path_info[1] 
     194                    # assume type == ticket 
     195                if len(path_info) > 2: 
     196                    id = path_info[2] 
     197            href = formatter.href.ticket(id) 
     198            comment_number = target 
     199        try: 
     200            comment_number = int(comment_number) - 1 
     201        except ValueError: 
     202            href = None 
     203        if href: 
     204            return ('<a href="%s#change_%s" title="Comment %s on %s:%s">' 
     205                    '%s</a>' % (href, comment_number, comment_number, type, id, 
     206                                label)) 
     207        else: 
     208            return label 
     209 
    177210     
    178211    # ISearchSource methods 
    179212 
  • templates/ticket.cs

     
    9999 
    100100<?cs if:len(ticket.changes) ?><h2>Change History</h2> 
    101101<div id="changelog"><?cs 
    102  each:change = ticket.changes ?> 
    103   <h3 id="change_<?cs var:name(change) ?>" class="change"><?cs 
    104    var:change.date ?>: Modified by <?cs var:change.author ?></h3><?cs 
     102 each:change = ticket.changes ?><?cs 
     103  set number=name(change) ?> 
     104  <h3 id="change_<?cs var:number ?>" class="change"><?cs 
     105   var:change.date ?>: Modified by <?cs var:change.author ?> 
     106   <a href="#change_<?cs var:number ?>" class="anchor" 
     107      title="Permalink to comment:<?cs var:#number+1 ?>"> 
     108    &para;</a></h3><?cs 
    105109  if:len(change.fields) ?> 
    106110   <ul class="changes"><?cs 
    107111   each:field = change.fields ?>