Edgewall Software

Ticket #6562: t6562-r6370-logo_abssrc-a.diff

File t6562-r6370-logo_abssrc-a.diff, 7.2 KB (added by osimons, 4 years ago)

Initial patch for returning both a relative and absolute path to the logo.

  • trac/ticket/templates/report.rss

     
    88    <link>${abs_href.report(report.id)}</link> 
    99    <description>Trac Report - $report.description</description> 
    1010    <language>en-us</language> 
    11     <image py:if="chrome.logo.src"> 
     11    <image py:if="chrome.logo.src_abs"> 
    1212      <title>$project.name</title> 
    13       <url>$chrome.logo.src</url> 
     13      <url>$chrome.logo.src_abs</url> 
    1414      <link>${abs_href.report(report.id != -1 and report.id or '')}</link> 
    1515    </image> 
    1616    <generator>Trac v${trac.version}</generator> 
  • trac/ticket/templates/ticket.rss

     
    88    <link>${abs_href.ticket(ticket.id)}</link> 
    99    <description>${unicode(wiki_to_html(context, ticket.description))}</description> 
    1010    <language>en-us</language> 
    11     <image py:if="'src' in chrome.logo"> 
     11    <image py:if="chrome.logo.src_abs"> 
    1212      <title>$project.name</title> 
    13       <url>$chrome.logo.src</url> 
     13      <url>$chrome.logo.src_abs</url> 
    1414      <link>${abs_href.ticket(ticket.id)}</link> 
    1515    </image> 
    1616    <generator>Trac $trac.version</generator> 
  • trac/ticket/templates/query.rss

     
    88    <link>$query_href</link> 
    99    <description>$project.descr</description> 
    1010    <language>en-US</language> 
    11     <image py:if="chrome.logo.src"> 
     11    <image py:if="chrome.logo.src_abs"> 
    1212      <title>$project.name</title> 
    13       <url>$chrome.logo.src</url> 
     13      <url>$chrome.logo.src_abs</url> 
    1414      <link>$query_href</link> 
    1515    </image> 
    1616    <generator>Trac $trac.version</generator> 
  • trac/versioncontrol/templates/revisionlog.rss

     
    99    <description>Trac Log - Revisions of $path</description> 
    1010    <language>en-US</language> 
    1111    <generator>Trac ${trac.version}</generator> 
    12     <image py:if="chrome.logo"> 
     12    <image py:if="chrome.logo.src_abs"> 
    1313      <title>${project.name}</title> 
    14       <url>${chrome.logo.src}</url> 
     14      <url>${chrome.logo.src_abs}</url> 
    1515      <link>$log_href</link> 
    1616    </image> 
    1717 
  • trac/timeline/templates/timeline.rss

     
    99    <description>Trac Timeline</description> 
    1010    <language>en-US</language> 
    1111    <generator>Trac ${trac.version}</generator> 
    12     <image py:if="chrome.logo.src"> 
     12    <image py:if="chrome.logo.src_abs"> 
    1313      <title>${project.name}</title> 
    14       <url>${ 
    15         chrome.logo.src_abs and chrome.logo.src_abs or abs_href(chrome.logo.src) 
    16       }</url> 
     14      <url>${chrome.logo.src_abs}</url> 
    1715      <link>${abs_href.timeline()}</link> 
    1816    </image> 
    1917 
  • trac/web/tests/chrome.py

     
    6868        self.env.config.set('header_logo', 'src', '') 
    6969        info = Chrome(self.env).prepare_request(req) 
    7070        assert 'src' not in info['logo'] 
     71        assert 'src_abs' not in info['logo'] 
    7172 
    7273        # Test with a relative path to the logo image 
    7374        self.env.config.set('header_logo', 'src', 'foo.png') 
    7475        info = Chrome(self.env).prepare_request(req) 
    7576        self.assertEqual('/trac.cgi/chrome/common/foo.png', info['logo']['src']) 
     77        self.assertEqual('http://example.org/trac.cgi/chrome/common/foo.png',  
     78                    info['logo']['src_abs']) 
    7679 
     80        # Test with a location in project htdocs 
     81        self.env.config.set('header_logo', 'src', 'site/foo.png') 
     82        info = Chrome(self.env).prepare_request(req) 
     83        self.assertEqual('/trac.cgi/chrome/site/foo.png', info['logo']['src']) 
     84        self.assertEqual('http://example.org/trac.cgi/chrome/site/foo.png',  
     85                    info['logo']['src_abs']) 
     86 
    7787        # Test with a server-relative path to the logo image 
    7888        self.env.config.set('header_logo', 'src', '/img/foo.png') 
    7989        info = Chrome(self.env).prepare_request(req) 
    8090        self.assertEqual('/img/foo.png', info['logo']['src']) 
     91        self.assertEqual('/img/foo.png', info['logo']['src_abs']) 
    8192 
    8293        # Test with an absolute path to the logo image 
    8394        self.env.config.set('header_logo', 'src', 
    8495                            'http://www.example.org/foo.png') 
    8596        info = Chrome(self.env).prepare_request(req) 
    8697        self.assertEqual('http://www.example.org/foo.png', info['logo']['src']) 
     98        self.assertEqual('http://www.example.org/foo.png', info['logo']['src_abs']) 
    8799 
    88100    def test_default_links(self): 
    89101        req = Mock(chrome={}, abs_href=Href('http://example.org/trac.cgi'), 
  • trac/web/chrome.py

     
    430430            add_link(fakereq, 'shortcut icon', src, mimetype=mimetype) 
    431431 
    432432        # Logo image 
    433         chrome['logo'] = self.get_logo_data(req.href) 
     433        chrome['logo'] = self.get_logo_data(req.href, req.abs_href) 
    434434 
    435435        # Navigation links 
    436436        allitems = {} 
     
    503503                    'mimetype': mimetype} 
    504504        return icon 
    505505 
    506     def get_logo_data(self, href): 
     506    def get_logo_data(self, href, abs_href=None): 
     507        # TODO: Possibly, links to 'common/' could use chrome.htdocs_location 
    507508        logo = {} 
    508509        logo_src = self.logo_src 
    509510        if logo_src: 
    510             logo_src_abs = logo_src.startswith('http://') or \ 
    511                            logo_src.startswith('https://') 
    512             if not logo_src.startswith('/') and not logo_src_abs: 
    513                 if '/' in logo_src: 
    514                     logo_src = href.chrome(logo_src) 
    515                 else: 
    516                     logo_src = href.chrome('common', logo_src) 
     511            abs_href = abs_href or href 
     512            if logo_src.startswith('http://') or \ 
     513                    logo_src.startswith('https://') or \ 
     514                    logo_src.startswith('/'): 
     515                # Nothing further can be calculated 
     516                logo_src_abs = logo_src 
     517            elif '/' in logo_src: 
     518                # Like 'common/trac_banner.png' or 'site/my_banner.png' 
     519                logo_src_abs = abs_href.chrome(logo_src) 
     520                logo_src = href.chrome(logo_src) 
     521            else: 
     522                # Like 'trac_banner.png' 
     523                logo_src_abs = abs_href.chrome('common', logo_src) 
     524                logo_src = href.chrome('common', logo_src) 
    517525            width = self.logo_width > -1 and self.logo_width or None 
    518526            height = self.logo_height > -1 and self.logo_height or None 
    519527            logo = {