Ticket #2974: browser_html_txt.patch
| File browser_html_txt.patch, 5.6 KB (added by cboos, 6 years ago) |
|---|
-
trac/versioncontrol/web_ui/browser.py
57 57 glob patterns, i.e. "*" can be used as a wild card) 58 58 (''since 0.10'')""") 59 59 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 60 72 # INavigationContributor methods 61 73 62 74 def get_active_navigation_item(self, req): … … 77 89 78 90 def match_request(self, req): 79 91 import re 80 match = re.match(r'/( browser|file)(?:(/.*))?', req.path_info)92 match = re.match(r'/(raw|txt)?(browser|file)(?:(/.*))?', req.path_info) 81 93 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')), 87 99 permanent=True) 100 format = match.group(1) 101 if format: 102 req.args['format'] = format 88 103 return True 89 104 90 105 def process_request(self, req): 91 106 path = req.args.get('path', '/') 92 107 rev = req.args.get('rev') or None 108 format = req.args.get('format') 93 109 110 if format: 111 if path.endswith('.txt'): 112 path = path[:-4] 113 elif path.endswith('.html'): 114 path = path[:-5] 115 94 116 # Find node for the requested path/rev 95 117 repos = self.env.get_repository(req.authname) 96 118 if rev: … … 114 136 'path': path, 115 137 'revision': rev, 116 138 'props': properties, 117 'href': req.href.browser(path, rev=rev),139 'href': self.href(req, path, rev=rev), 118 140 'log_href': req.href.log(path, rev=rev), 119 141 'restr_changeset_href': req.href.changeset(node.rev, 120 142 node.created_path), … … 130 152 req.hdf['browser.is_dir'] = True 131 153 self._render_directory(req, repos, node, rev) 132 154 else: 133 self._render_file(req, repos, node, rev )155 self._render_file(req, repos, node, rev, format) 134 156 135 157 add_stylesheet(req, 'common/css/browser.css') 136 158 return 'browser.cs', None … … 152 174 'rev': entry.rev, 153 175 'permission': 1, # FIXME 154 176 '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) 156 178 }) 157 179 changes = get_changes(self.env, repos, [i['rev'] for i in info]) 158 180 … … 179 201 180 202 switch_ordering_hrefs = {} 181 203 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, 184 206 desc=(col == order and not desc and 1 or None)) 185 207 186 208 # ''Zip Archive'' alternate link … … 196 218 'items': info, 'changes': changes, 197 219 'order_href': switch_ordering_hrefs} 198 220 199 def _render_file(self, req, repos, node, rev =None):221 def _render_file(self, req, repos, node, rev, format): 200 222 req.perm.assert_permission('FILE_VIEW') 201 223 202 224 mimeview = Mimeview(self.env) … … 210 232 mime_type or 'text/plain' 211 233 212 234 # Eventually send the file directly 213 format = req.args.get('format')214 235 if format in ['raw', 'txt']: 215 236 req.send_response(200) 216 237 req.send_header('Content-Type', … … 247 268 248 269 # add ''Plain Text'' alternate link if needed 249 270 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') 251 272 add_link(req, 'alternate', plain_href, 'Plain Text', 252 273 'text/plain') 253 274 254 275 # 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') 256 277 add_link(req, 'alternate', raw_href, 'Original Format', mime_type) 257 278 258 279 self.log.debug("Rendering preview of node %s@%s with mime-type %s" … … 287 308 else: 288 309 anchor = '' 289 310 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')
