Edgewall Software

Ticket #2974: browser_html_txt.patch

File browser_html_txt.patch, 5.6 KB (added by cboos, 6 years ago)

Similar patch, this time for the TracBrowser.

  • trac/versioncontrol/web_ui/browser.py

     
    5757        glob patterns, i.e. "*" can be used as a wild card) 
    5858        (''since 0.10'')""") 
    5959 
     60    def href(self, req, path, *args, **dict): 
     61        base = 'browser' 
     62        if 'format' in dict: 
     63            format = dict.pop('format') 
     64            base = format + base 
     65            if format == 'txt': 
     66                path += '.txt' 
     67        else: # HTML preview 
     68            path += '.html' 
     69        return req.href(base, path, *args, **dict) 
     70         
     71 
    6072    # INavigationContributor methods 
    6173 
    6274    def get_active_navigation_item(self, req): 
     
    7789 
    7890    def match_request(self, req): 
    7991        import re 
    80         match = re.match(r'/(browser|file)(?:(/.*))?', req.path_info) 
     92        match = re.match(r'/(raw|txt)?(browser|file)(?:(/.*))?', req.path_info) 
    8193        if match: 
    82             req.args['path'] = match.group(2) or '/' 
    83             if match.group(1) == 'file': 
    84                 req.redirect(req.href.browser(req.args.get('path'), 
    85                                               rev=req.args.get('rev'), 
    86                                               format=req.args.get('format')), 
     94            req.args['path'] = match.group(3) or '/' 
     95            if match.group(2) == 'file': 
     96                req.redirect(self.href(req, req.args.get('path'), 
     97                                       rev=req.args.get('rev'), 
     98                                       format=req.args.get('format')), 
    8799                             permanent=True) 
     100            format = match.group(1) 
     101            if format: 
     102                req.args['format'] = format 
    88103            return True 
    89104 
    90105    def process_request(self, req): 
    91106        path = req.args.get('path', '/') 
    92107        rev = req.args.get('rev') or None 
     108        format = req.args.get('format') 
    93109 
     110        if format: 
     111            if path.endswith('.txt'): 
     112                path = path[:-4] 
     113        elif path.endswith('.html'): 
     114                path = path[:-5] 
     115 
    94116        # Find node for the requested path/rev 
    95117        repos = self.env.get_repository(req.authname) 
    96118        if rev: 
     
    114136            'path': path, 
    115137            'revision': rev, 
    116138            'props': properties, 
    117             'href': req.href.browser(path, rev=rev), 
     139            'href': self.href(req, path, rev=rev), 
    118140            'log_href': req.href.log(path, rev=rev), 
    119141            'restr_changeset_href': req.href.changeset(node.rev, 
    120142                                                       node.created_path), 
     
    130152            req.hdf['browser.is_dir'] = True 
    131153            self._render_directory(req, repos, node, rev) 
    132154        else: 
    133             self._render_file(req, repos, node, rev) 
     155            self._render_file(req, repos, node, rev, format) 
    134156 
    135157        add_stylesheet(req, 'common/css/browser.css') 
    136158        return 'browser.cs', None 
     
    152174                'rev': entry.rev, 
    153175                'permission': 1, # FIXME 
    154176                'log_href': req.href.log(entry.path, rev=rev), 
    155                 'browser_href': req.href.browser(entry.path, rev=rev) 
     177                'browser_href': self.href(req, entry.path, rev=rev) 
    156178            }) 
    157179        changes = get_changes(self.env, repos, [i['rev'] for i in info]) 
    158180 
     
    179201 
    180202        switch_ordering_hrefs = {} 
    181203        for col in ('name', 'size', 'date'): 
    182             switch_ordering_hrefs[col] = req.href.browser( 
    183                 node.path, rev=rev, order=col, 
     204            switch_ordering_hrefs[col] = self.href( 
     205                req, node.path, rev=rev, order=col, 
    184206                desc=(col == order and not desc and 1 or None)) 
    185207 
    186208        # ''Zip Archive'' alternate link 
     
    196218                              'items': info, 'changes': changes, 
    197219                              'order_href': switch_ordering_hrefs} 
    198220 
    199     def _render_file(self, req, repos, node, rev=None): 
     221    def _render_file(self, req, repos, node, rev, format): 
    200222        req.perm.assert_permission('FILE_VIEW') 
    201223 
    202224        mimeview = Mimeview(self.env) 
     
    210232                        mime_type or 'text/plain' 
    211233 
    212234        # Eventually send the file directly 
    213         format = req.args.get('format') 
    214235        if format in ['raw', 'txt']: 
    215236            req.send_response(200) 
    216237            req.send_header('Content-Type', 
     
    247268 
    248269            # add ''Plain Text'' alternate link if needed 
    249270            if not is_binary(chunk) and mime_type != 'text/plain': 
    250                 plain_href = req.href.browser(node.path, rev=rev, format='txt') 
     271                plain_href = self.href(req, node.path, rev=rev, format='txt') 
    251272                add_link(req, 'alternate', plain_href, 'Plain Text', 
    252273                         'text/plain') 
    253274 
    254275            # add ''Original Format'' alternate link (always) 
    255             raw_href = req.href.browser(node.path, rev=rev, format='raw') 
     276            raw_href = self.href(req, node.path, rev=rev, format='raw') 
    256277            add_link(req, 'alternate', raw_href, 'Original Format', mime_type) 
    257278 
    258279            self.log.debug("Rendering preview of node %s@%s with mime-type %s" 
     
    287308        else: 
    288309            anchor = '' 
    289310        label = urllib.unquote(label) 
    290         return html.A(href=formatter.href.browser(path, rev=rev) + anchor, 
    291                       class_='source')[label] 
     311        href = formatter.href.browser(path, rev=rev) 
     312        if formatter.req: 
     313            href = self.href(formatter.req, path, rev=rev) 
     314        return html.A(label, href=href+anchor, class_='source')