Edgewall Software

Ticket #234: intertrac.1017.2.diff

File intertrac.1017.2.diff, 8.0 KB (added by cboos@…, 7 years ago)

Fixed version of the Intertrac patch against 1017.

  • htdocs/css/trac.css

    === htdocs/css/trac.css
    ==================================================================
     
    240240a.missing:link,a.missing:visited { background: #fafaf0; color: #998 } 
    241241a.missing:hover { color: #000; } 
    242242 
     243a.external:link,a.external:visited { color: #00b } 
     244 
    243245#content.wiki { line-height: 140% } 
    244246.wikitoolbar { 
    245247 border: solid #d7d7d7; 
  • trac/WikiFormatter.py

    === trac/WikiFormatter.py
    ==================================================================
     
    4141              r"""(?P<strike>~~)""", 
    4242              r"""(?P<inlinecode>!?\{\{\{(?P<inline>.*?)\}\}\})""", 
    4343              r"""(?P<htmlescapeentity>!?&#\d+;)""", 
    44               r"""(?P<tickethref>!?#\d+)""", 
    45               r"""(?P<changesethref>!?\[\d+\])""", 
     44              r"""(?P<tickethref>!?#(?P<t_intertrac>[a-zA-z]?)\d+)""", 
     45              r"""(?P<changesethref>!?\[(?P<c_intertrac>[a-zA-z]?)\d+\])""", 
    4646              r"""(?P<reporthref>!?\{\d+\})""", 
    47               r"""(?P<modulehref>!?((?P<modulename>bug|ticket|browser|source|repos|report|changeset|wiki|milestone|search):(?P<moduleargs>(&#34;(.*?)&#34;|'(.*?)')|([^ ]*[^\., \)]))))""", 
     47              r"""(?P<modulehref>!?((?P<modulename>bug|ticket|browser|source|repos|report|changeset|wiki|milestone|search):(?P<m_intertrac>[a-zA-z]:?)(?P<moduleargs>(&#34;(.*?)&#34;|'(.*?)')|([^ ]*[^\., \)]))))""", 
    4848              r"""(?P<wikilink>!?(^|(?<=[^A-Za-z]))[A-Z][a-z]+(?:[A-Z][a-z]*[a-z/])+(?=\Z|\s|,|\.|:|\)))""", 
    4949              r"""(?P<fancylink>!?\[(?P<fancyurl>([a-z]+:[^ ]+)) (?P<linkname>.*?)\])"""] 
    5050 
     
    112112        return match 
    113113 
    114114    def _tickethref_formatter(self, match, fullmatch): 
    115         number = int(match[1:]) 
    116         cursor = self.db.cursor () 
    117         cursor.execute('SELECT summary,status FROM ticket WHERE id=%s', number) 
    118         row = cursor.fetchone () 
    119         if not row: 
    120             return '<a class="missing" href="%s">#%d</a>' % (self._href.ticket(number), number) 
     115        intertrac = fullmatch.group('t_intertrac') 
     116        if intertrac: 
     117            number = int(match[1+len(intertrac):]) 
     118            href, title, _class = self._intertrac_link(intertrac) 
     119            return '<a class="%s" title="%s" href="%s/ticket/%d">#%d</a>' % (_class, title, href, number, number) 
    121120        else: 
    122             summary = util.shorten_line(row[0]) 
    123             if row[1] == 'new': 
    124                 return '<a href="%s" title="NEW : %s">#%d*</a>' % (self._href.ticket(number), summary, number) 
    125             elif row[1] == 'closed': 
    126                 return '<a href="%s" title="CLOSED : %s"><del>#%d</del></a>' % (self._href.ticket(number), summary, number) 
     121            number = int(match[1:]) 
     122            cursor = self.db.cursor () 
     123            cursor.execute('SELECT summary,status FROM ticket WHERE id=%s', number) 
     124            row = cursor.fetchone () 
     125            if not row: 
     126                return '<a class="missing" href="%s">#%d</a>' % (self._href.ticket(number), number) 
    127127            else: 
    128                 return '<a href="%s" title="%s">#%d</a>' % (self._href.ticket(number), summary, number) 
     128                summary = util.shorten_line(row[0]) 
     129                if row[1] == 'new': 
     130                    return '<a href="%s" title="NEW : %s">#%d*</a>' % (self._href.ticket(number), summary, number) 
     131                elif row[1] == 'closed': 
     132                    return '<a href="%s" title="CLOSED : %s"><del>#%d</del></a>' % (self._href.ticket(number), summary, number) 
     133                else: 
     134                    return '<a href="%s" title="%s">#%d</a>' % (self._href.ticket(number), summary, number) 
    129135 
    130136    def _changesethref_formatter(self, match, fullmatch): 
    131         number = int(match[1:-1]) 
    132         cursor = self.db.cursor () 
    133         cursor.execute('SELECT message FROM revision WHERE rev=%d', number) 
    134         row = cursor.fetchone () 
    135         if not row: 
    136             return '[<a class="missing" href="%s">%d</a>]' % (self._href.changeset(number), number) 
     137        intertrac = fullmatch.group('c_intertrac') 
     138        if intertrac: 
     139            number = int(match[1+len(intertrac):-1]) 
     140            href, title, _class = self._intertrac_link(intertrac) 
     141            return '[<a class="%s" title="%s" href="%s/changeset/%d">%d</a>]' % (_class, title, href, number, number) 
    137142        else: 
    138             return '[<a title="%s" href="%s">%d</a>]' % (util.shorten_line(row[0]),self._href.changeset(number), number) 
     143            number = int(match[1:-1]) 
     144            cursor = self.db.cursor () 
     145            cursor.execute('SELECT message FROM revision WHERE rev=%d', number) 
     146            row = cursor.fetchone () 
     147            if not row: 
     148                return '[<a class="missing" href="%s">%d</a>]' % (self._href.changeset(number), number) 
     149            else: 
     150                return '[<a title="%s" href="%s">%d</a>]' % (util.shorten_line(row[0]),self._href.changeset(number), number) 
    139151 
    140152    def _reporthref_formatter(self, match, fullmatch): 
    141153        number = int(match[1:-1]) 
     
    147159            return None, None 
    148160        module = text[:sep] 
    149161        args = text[sep+1:] 
     162        sep2 = args.find(':') 
     163        if sep2 != -1: 
     164            intertrac = args[:sep2] 
     165            href, title, _class = self._intertrac_link(intertrac) 
     166            args = args[sep2+1:] 
     167            return "%s/%s/%s"% (href,module,args), text, _class, title 
    150168        if module in ['bug', 'ticket']: 
    151169            cursor = self.db.cursor () 
    152170            cursor.execute('SELECT summary,status FROM ticket WHERE id=%s', args) 
     
    195213            return None, None, 0, None 
    196214 
    197215    def _modulehref_formatter(self, match, fullmatch): 
    198         link, text, missing, title = self._expand_module_link(match) 
    199         if link and missing: 
    200             return '<a title="%s" class="missing" href="%s">%s?</a>' % (title,link, text) 
     216        link, text, _class, title = self._expand_module_link(match) 
     217        if link and _class: 
     218            qmark = '' 
     219            if _class == 1: 
     220                _class, qmark = 'missing', '?' 
     221            return '<a title="%s" class="%s" href="%s">%s%s</a>' % (title, _class, link, text, qmark) 
    201222        elif link: 
    202223            return '<a title="%s" href="%s">%s</a>' % (title or '',link, text) 
    203224        else: 
     
    217238        link = fullmatch.group('fancyurl') 
    218239        name = fullmatch.group('linkname') 
    219240 
    220         module_link, t, missing, title = self._expand_module_link(link) 
    221         if module_link and missing: 
    222             return '<a class="missing" href="%s">%s?</a>' % (module_link, name) 
     241        module_link, t, _class, title = self._expand_module_link(link) 
     242        if module_link and _class: 
     243            qmark = '' 
     244            if _class == 1: 
     245                _class, qmark = 'missing', '?' 
     246            return '<a class="%s" href="%s">%s%s</a>' % (_class, module_link, name, qmark) 
    223247        elif module_link: 
    224248            return '<a href="%s">%s</a>' % (module_link, name) 
    225249        else: 
    226250            return '<a href="%s">%s</a>' % (link, name) 
    227251 
     252    def _intertrac_link(self, intertrac): 
     253        href = self.env.get_config('intertrac', intertrac.upper() + '.href') 
     254        if href: 
     255            title = self.env.get_config('intertrac', intertrac.upper() + '.title') 
     256            _class = 'external' 
     257        else: 
     258            title = "Unknown intertrac link '%s'" % intertrac 
     259            _class = 'missing' 
     260        return href, title, _class 
    228261 
     262 
    229263class OneLinerFormatter(CommonFormatter): 
    230264    """ 
    231265    A special version of the wiki formatter that only implement a 
     
    275309    # RE patterns used by other patterna 
    276310    _helper_patterns = ('idepth', 'ldepth', 'hdepth', 'fancyurl', 
    277311                        'linkname', 'macroname', 'macroargs', 'inline', 
    278                         'modulename', 'moduleargs') 
     312                        'modulename', 'moduleargs', 
     313                        't_intertrac', 'c_intertrac', 'm_intertrac') 
    279314 
    280315    _htmlproc_disallow_rule = re.compile('(?i)<(script|noscript|embed|object|iframe|frame|frameset|link|style|meta|param|doctype)') 
    281316