Edgewall Software

Ticket #4144: relative-links-fix.diff

File relative-links-fix.diff, 3.0 KB (added by Tim Hatch <trac@…>, 5 years ago)

First-draft fix (timeline for hashrefs only)

  • trac/wiki/formatter.py

     
    230230    _processor_re = re.compile('#\!([\w+-][\w+-/]*)') 
    231231    _anchor_re = re.compile('[^\w:.-]+', re.UNICODE) 
    232232 
    233     def __init__(self, env, req=None, absurls=False, db=None): 
     233    def __init__(self, env, req=None, absurls=False, db=None, itemurl=None): 
    234234        self.env = env 
    235235        self.req = req 
    236236        self._db = db 
     237        self._itemurl = itemurl 
    237238        self._absurls = absurls 
    238239        self._anchors = {} 
    239240        self._open_tags = [] 
     
    428429    def _make_relative_link(self, url, text): 
    429430        if url.startswith('//'): # only the protocol will be kept 
    430431            return html.A(text, class_="ext-link", href=url) 
     432        elif self._itemurl and url and url[0] in "#.": # hash ref 
     433            return html.A(text, href=self._itemurl+url) 
    431434        else: 
    432435            return html.A(text, href=url) 
    433436 
     
    861864    """ 
    862865    flavor = 'oneliner' 
    863866 
    864     def __init__(self, env, absurls=False, db=None, req=None): 
    865         Formatter.__init__(self, env, req, absurls, db) 
     867    def __init__(self, env, absurls=False, db=None, req=None, itemurl=None): 
     868        Formatter.__init__(self, env, req, absurls, db, itemurl) 
    866869 
    867870    # Override a few formatters to disable some wiki syntax in "oneliner"-mode 
    868871    def _list_formatter(self, match, fullmatch): return match 
     
    9981001# -- wiki_to_* helper functions 
    9991002 
    10001003def wiki_to_html(wikitext, env, req, db=None, 
    1001                  absurls=False, escape_newlines=False): 
     1004                 absurls=False, escape_newlines=False, itemurl=None): 
    10021005    if not wikitext: 
    10031006        return Markup() 
    10041007    out = StringIO() 
    1005     Formatter(env, req, absurls, db).format(wikitext, out, escape_newlines) 
     1008    Formatter(env, req, absurls, db, itemurl=itemurl).format(wikitext, out, escape_newlines) 
    10061009    return Markup(out.getvalue()) 
    10071010 
    10081011def wiki_to_oneliner(wikitext, env, db=None, shorten=False, absurls=False, 
    1009                      req=None): 
     1012                     req=None, itemurl=None): 
    10101013    if not wikitext: 
    10111014        return Markup() 
    10121015    out = StringIO() 
    1013     OneLinerFormatter(env, absurls, db, req=req).format(wikitext, out, shorten) 
     1016    OneLinerFormatter(env, absurls, db, itemurl=itemurl, req=req).format(wikitext, out, shorten) 
    10141017    return Markup(out.getvalue()) 
    10151018 
    10161019def wiki_to_outline(wikitext, env, db=None, 
  • templates/timeline.html

     
    4242            </a></dt> 
    4343            <dd class="${event.kind}" py:with="wikify = event.use_oneliner and wiki_to_oneliner or wiki_to_html"> 
    4444              ${event.markup} 
    45               <py:if test="event.message">${wikify(event.message)}</py:if> 
     45              <py:if test="event.message">${wikify(event.message, itemurl=event.href)}</py:if> 
    4646            </dd> 
    4747          </py:for> 
    4848        </dl>