Changeset 2895
- Timestamp:
- 12/13/07 19:13:12 (1 year ago)
- Files:
-
- tracdownloaderplugin/0.10/tracdownloader/model.py (modified) (8 diffs)
- tracdownloaderplugin/0.10/tracdownloader/templates/downloads_list.cs (modified) (4 diffs)
- tracdownloaderplugin/0.10/tracdownloader/web_ui.py (modified) (8 diffs)
- tracdownloaderplugin/0.9/tracdownloader/admin.py (modified) (1 diff)
- tracdownloaderplugin/0.9/tracdownloader/model.py (modified) (8 diffs)
- tracdownloaderplugin/0.9/tracdownloader/templates/downloads_list.cs (modified) (4 diffs)
- tracdownloaderplugin/0.9/tracdownloader/web_ui.py (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
tracdownloaderplugin/0.10/tracdownloader/model.py
r2894 r2895 122 122 return years, months 123 123 124 def render_downloads_table(env, req ):124 def render_downloads_table(env, req, filter=None, f_id=None): 125 125 """Prepares data for table of downloads.""" 126 126 … … 131 131 categories = [] 132 132 for category in categories_list: 133 releases_obj, releases_list = category.get_releases() 134 releases = [] 135 136 # Skip unwanted records 137 if filter == 'category' and f_id != category.id: 138 continue 139 elif filter == 'release': 140 display = False 141 for r in releases_list: 142 if r.id == f_id: 143 display = True 144 if not display: 145 continue 133 146 category_dict = {'id': category.id, 134 147 'name': category.name, … … 139 152 category_dict['timestamp'] = util.format_datetime(category_dict['timestamp']) 140 153 141 releases_obj, releases_list = category.get_releases()142 releases = []143 154 for release in releases_list: 155 # Skip unwanted records 156 if filter == 'release' and f_id != release.id: 157 continue 144 158 release_dict = {'id': release.id, 145 159 'name': release.name, … … 279 293 self.sort = None 280 294 self.timestamp = time.time() 295 self.deleted = None 281 296 self.is_new = True 282 297 283 298 def _fetch_cat(self, id): 284 299 cursor = self.db.cursor() 285 cursor.execute("SELECT id, name, notes, sort, timestamp "286 "FROM downloader_category "287 "WHERE id = %s", (id,))300 cursor.execute("SELECT id, name, notes, sort, timestamp, deleted " 301 "FROM downloader_category " 302 "WHERE id = %s", (id,)) 288 303 record = cursor.fetchone() 304 if not record: 305 raise TracError('Category with id ' + str(id) + ' not found.') 289 306 self.id = record[0] 290 307 self.name = record[1] … … 292 309 self.sort = record[3] 293 310 self.timestamp = record[4] 311 self.deleted = record[5] 294 312 self.is_new = False 295 313 … … 394 412 self.sort = None 395 413 self.timestamp = time.time() 414 self.deleted = None 396 415 self.is_new = True 397 416 398 417 def _fetch_rel(self, id): 399 418 cursor = self.db.cursor() 400 cursor.execute("SELECT id, category, name, notes, sort, timestamp " 419 cursor.execute("SELECT id, category, name, notes, sort, timestamp, " 420 "deleted " 401 421 "FROM downloader_release " 402 422 "WHERE id = %s", (id,)) 403 423 record = cursor.fetchone() 424 if not record: 425 raise TracError('Release with id ' + str(id) + ' not found.') 404 426 self.id = record[0] 405 427 self.category = record[1] … … 408 430 self.sort = record[4] 409 431 self.timestamp = record[5] 432 self.deleted = record[6] 410 433 self.is_new = False 411 434 … … 531 554 self.timestamp = time.time() 532 555 self.architecture = None 556 self.deleted = None 533 557 self.is_new = True 534 558 tracdownloaderplugin/0.10/tracdownloader/templates/downloads_list.cs
r2875 r2895 1 <table class="listing<?cs if:(!in_adm&&!download_link && !subcount(quest))?> wide<?cs /if ?>"> 1 <?cs if:href.filter ?><a href="<?cs var:href.base ?>">show all downloads</a><?cs /if 2 ?><table class="listing<?cs if:(!in_adm&&!download_link && !subcount(quest))?> wide<?cs /if ?>"> 2 3 <thead> 3 4 <tr> … … 18 19 <tr class="<?cs var:row_class ?> category"> 19 20 <td colspan="5"> 20 < ?cs if in_adm ?><a href="<?cs var:href.base ?>/category/<?cs var:category.id ?>"><?cs /if21 ?><?csvar:category.name ?><?cs if in_adm ?></a><?cs /if ?>21 <a href="<?cs var:href.base ?>/category/<?cs var:category.id ?>"><?cs 22 var:category.name ?><?cs if in_adm ?></a><?cs /if ?> 22 23 <?cs if !in_adm ?> 23 <a href="<?cs var:href.base ?>/notes/category/<?cs var:category.id ?>">24 <a href="<?cs var:href.base+href.filter ?>/notes/category/<?cs var:category.id ?>"> 24 25 <img alt="Category notes" src="<?cs var:chrome.href ?>/downloader/img/notes.png" /> 25 26 </a> … … 37 38 <td> </td> 38 39 <td colspan="4"> 39 < ?cs if in_adm ?><a href="<?cs var:href.base ?>/release/<?cs var:release.id ?>"><?cs /if ?>40 <a href="<?cs var:href.base ?>/release/<?cs var:release.id ?>"> 40 41 <?cs var:release.name ?> 41 42 <?cs if in_adm ?></a><?cs /if ?> 42 43 <?cs if !in_adm ?> 43 <a href="<?cs var:href.base ?>/notes/release/<?cs var:release.id ?>">44 <a href="<?cs var:href.base+href.filter ?>/notes/release/<?cs var:release.id ?>"> 44 45 <img alt="Release notes" src="<?cs var:chrome.href ?>/downloader/img/notes.png" /> 45 46 </a> … … 58 59 <td colspan="2"> </td> 59 60 <td> 60 <a href="<?cs var:href.base ?>/file/<?cs var:file.id ?>">61 <a href="<?cs var:href.base+href.filter ?>/file/<?cs var:file.id ?>"> 61 62 <?cs var:file.name_disp ?><?cs if:!file.name_disp ?>--<?cs /if ?> 62 63 </a> 63 64 <?cs if !in_adm ?> 64 <a href="<?cs var:href.base ?>/notes/file/<?cs var:file.id ?>">65 <a href="<?cs var:href.base+href.filter ?>/notes/file/<?cs var:file.id ?>"> 65 66 <img alt="File notes" src="<?cs var:chrome.href ?>/downloader/img/notes.png" /> 66 67 </a> tracdownloaderplugin/0.10/tracdownloader/web_ui.py
r2894 r2895 58 58 match = re.match( \ 59 59 '/downloader(?:/([^/]+))?(?:/([^/]+))?' + \ 60 '(?:/([^/]+))?(?:/([^/]+))?(?:/( .*)$)?', \60 '(?:/([^/]+))?(?:/([^/]+))?(?:/([^/]+))?(?:/(.*)$)?', \ 61 61 req.path_info) 62 62 if match: … … 71 71 req.args['arg_5'] = match.group(5) 72 72 self.arg_5 = match.group(5) 73 req.args['arg_6'] = match.group(6) 74 self.arg_6 = match.group(6) 73 75 return True 74 76 ''' 75 77 def _get_pages(self, req): 76 78 """Return a list of available admin pages.""" … … 78 80 pages.sort() 79 81 return pages 82 ''' 80 83 81 84 def process_request(self, req): … … 445 448 #self.env.log.info("Files: " + req.session.get('downloader_files')) 446 449 450 filter = None 451 f_id = None 447 452 if req.args.get('arg_2'): 448 453 arg_1 = req.args.get('arg_1') … … 450 455 arg_3 = req.args.get('arg_3') 451 456 arg_4 = req.args.get('arg_4') 457 arg_5 = req.args.get('arg_5') 458 arg_6 = req.args.get('arg_6') 452 459 if arg_2 == 'notes' and arg_3 and arg_4 != '': 453 460 self._render_note(req, arg_3, arg_4) 454 elif arg_2 == 'file' and arg_2 != '': 455 if self._serve_file(req, arg_3, arg_4): 461 elif arg_2 == 'file' and arg_3 != '': 462 href_base = self.env.href.downloader(arg_1, 463 arg_2) 464 if self._serve_file(req, arg_3, arg_4, href_base): 456 465 return None 466 elif arg_2 == 'release' or arg_2 == 'category' and arg_3 != '': 467 try: 468 f_id = int(arg_3) 469 filter = arg_2 470 except ValueError: 471 pass 472 req.hdf['href.filter'] = '/' + arg_2 + '/' + arg_3 473 if arg_4 == 'file' and arg_5 != '': 474 href_base = self.env.href.downloader(arg_1, 475 arg_2, 476 arg_3, 477 arg_4) 478 479 if self._serve_file(req, arg_5, arg_6, href_base): 480 return None 481 elif arg_4 == 'notes' and arg_5 and arg_6 != '': 482 self._render_note(req, arg_5, arg_6) 457 483 else: 458 484 # Test if session works 459 485 req.session['downloader_test'] = 'test' 460 486 461 render_downloads_table(self.env, req )487 render_downloads_table(self.env, req, filter=filter, f_id=f_id) 462 488 463 489 return 'downloader.cs', None 464 490 465 def _serve_file(self, req, id, file_name ):491 def _serve_file(self, req, id, file_name, href_base): 466 492 """ 467 493 Workarounds and decisions about what to do when file is clicked. … … 476 502 # Redirect to address with filename at the end 477 503 if file_name == '' or file_name == None: 478 req.redirect(self.env.href.downloader(self.arg_1, 479 'file', 480 id, 481 file.name)) 504 req.redirect(href_base + '/' + str(id) + '/' + file.name) 482 505 return False 483 506 … … 599 622 # Config defaults must be set 600 623 config_defaults(self, self.env) 624 625 if ns == 'downloader': 626 what = 'file' 627 try: 628 obj = File(self.env, int(target)) 629 except TracError, ValueError: 630 obj = None 631 elif ns == 'downloaderrel': 632 what = 'release' 633 try: 634 obj = Release(self.env, int(target)) 635 except TracError, ValueError: 636 obj = None 637 elif ns == 'downloadercat': 638 try: 639 obj = Category(self.env, int(target)) 640 except TracError, ValueError: 641 obj = None 642 what = 'category' 643 601 644 try: 602 645 # Try to use fancier code for Trac 10 603 646 from trac.util.html import html 604 return self._format_wiki_link_10(formatter, ns, target, label) 647 return self._format_wiki_link_10(formatter, ns, target, label, obj, 648 what) 605 649 except ImportError: 606 return self._format_wiki_link_09(formatter, ns, target, label) 607 608 def _format_wiki_link_10(self, formatter, ns, target, label): 650 return self._format_wiki_link_09(formatter, ns, target, label, obj, 651 what) 652 653 def _format_wiki_link_10(self, formatter, ns, target, label, obj, what): 609 654 from trac.util.html import html 610 try: 611 file = File(self.env, int(target)) 612 except TracError, ValueError: 655 656 if not obj: 613 657 return html.A(label, rel='nofollow', href='#', 614 title = 'File with this id not found.') 615 616 fname = file.name 658 title = '%s with this id not found.' %\ 659 capitalize(what)) 660 661 name = obj.name 617 662 if label == ns + ':' + target: 618 label = fname619 620 if file.deleted:663 label = name 664 665 if obj.deleted: 621 666 return html.A(label, rel='nofollow', href='#', 622 title='Sorry, file was deleted.')623 624 href = formatter.href.downloader('download', 'file', target, fname)667 title='Sorry, %s was deleted.' % what) 668 669 href = formatter.href.downloader('download', what, target, name) 625 670 return html.A(label, href=href) 626 671 627 def _format_wiki_link_09(self, formatter, ns, target, label): 628 try: 629 file = File(self.env, int(target)) 630 except TracError, ValueError: 672 def _format_wiki_link_09(self, formatter, ns, target, label, obj, what): 673 if not obj: 631 674 return ('<a href="%s" rel="%s" title="%s">%s</a>' % \ 632 675 ('#', 'nofollow', \ 633 ' File with this id not found.', label))634 635 fname = file.name676 '%s with this id not found.' % capitalize(what), label)) 677 678 name = obj.name 636 679 if label == ns + ':' + target: 637 label = fname638 639 if file.deleted:680 label = name 681 682 if obj.deleted: 640 683 return ('<a href="%s" rel="%s" title="%s">%s</a>' % \ 641 684 ('#', 'nofollow', \ 642 'Sorry, file was deleted.', label))643 644 href = formatter.href.downloader('download', 'file', target, fname)685 'Sorry, %s was deleted.' % what, label)) 686 687 href = formatter.href.downloader('download', what, target, name) 645 688 return ('<a href="%s">%s</a>' % (href, label)) 646 689 … … 668 711 669 712 def get_link_resolvers(self): 670 yield ('downloader', self._format_wiki_link) 713 return [('downloader', self._format_wiki_link), 714 ('downloaderrel', self._format_wiki_link), 715 ('downloadercat', self._format_wiki_link)] 671 716 672 717 tracdownloaderplugin/0.9/tracdownloader/admin.py
r2894 r2895 673 673 listed in self.get_attrs 674 674 """ 675 676 675 if not hasattr(self, 'get_attrs') and not get_attrs: 677 676 return '' tracdownloaderplugin/0.9/tracdownloader/model.py
r2894 r2895 122 122 return years, months 123 123 124 def render_downloads_table(env, req ):124 def render_downloads_table(env, req, filter=None, f_id=None): 125 125 """Prepares data for table of downloads.""" 126 126 … … 131 131 categories = [] 132 132 for category in categories_list: 133 releases_obj, releases_list = category.get_releases() 134 releases = [] 135 136 # Skip unwanted records 137 if filter == 'category' and f_id != category.id: 138 continue 139 elif filter == 'release': 140 display = False 141 for r in releases_list: 142 if r.id == f_id: 143 display = True 144 if not display: 145 continue 133 146 category_dict = {'id': category.id, 134 147 'name': category.name, … … 139 152 category_dict['timestamp'] = util.format_datetime(category_dict['timestamp']) 140 153 141 releases_obj, releases_list = category.get_releases()142 releases = []143 154 for release in releases_list: 155 # Skip unwanted records 156 if filter == 'release' and f_id != release.id: 157 continue 144 158 release_dict = {'id': release.id, 145 159 'name': release.name, … … 279 293 self.sort = None 280 294 self.timestamp = time.time() 295 self.deleted = None 281 296 self.is_new = True 282 297 283 298 def _fetch_cat(self, id): 284 299 cursor = self.db.cursor() 285 cursor.execute("SELECT id, name, notes, sort, timestamp "286 "FROM downloader_category "287 "WHERE id = %s", (id,))300 cursor.execute("SELECT id, name, notes, sort, timestamp, deleted " 301 "FROM downloader_category " 302 "WHERE id = %s", (id,)) 288 303 record = cursor.fetchone() 304 if not record: 305 raise TracError('Category with id ' + str(id) + ' not found.') 289 306 self.id = record[0] 290 307 self.name = record[1] … … 292 309 self.sort = record[3] 293 310 self.timestamp = record[4] 311 self.deleted = record[5] 294 312 self.is_new = False 295 313 … … 394 412 self.sort = None 395 413 self.timestamp = time.time() 414 self.deleted = None 396 415 self.is_new = True 397 416 398 417 def _fetch_rel(self, id): 399 418 cursor = self.db.cursor() 400 cursor.execute("SELECT id, category, name, notes, sort, timestamp " 419 cursor.execute("SELECT id, category, name, notes, sort, timestamp, " 420 "deleted " 401 421 "FROM downloader_release " 402 422 "WHERE id = %s", (id,)) 403 423 record = cursor.fetchone() 424 if not record: 425 raise TracError('Release with id ' + str(id) + ' not found.') 404 426 self.id = record[0] 405 427 self.category = record[1] … … 408 430 self.sort = record[4] 409 431 self.timestamp = record[5] 432 self.deleted = record[6] 410 433 self.is_new = False 411 434 … … 531 554 self.timestamp = time.time() 532 555 self.architecture = None 556 self.deleted = None 533 557 self.is_new = True 534 558 tracdownloaderplugin/0.9/tracdownloader/templates/downloads_list.cs
r2866 r2895 1 <table class="listing<?cs if:(!in_adm&&!download_link && !subcount(quest))?> wide<?cs /if ?>"> 1 <?cs if:href.filter ?><a href="<?cs var:href.base ?>">show all downloads</a><?cs /if 2 ?><table class="listing<?cs if:(!in_adm&&!download_link && !subcount(quest))?> wide<?cs /if ?>"> 2 3 <thead> 3 4 <tr> … … 18 19 <tr class="<?cs var:row_class ?> category"> 19 20 <td colspan="5"> 20 < ?cs if in_adm ?><a href="<?cs var:href.base ?>/category/<?cs var:category.id ?>"><?cs /if21 ?><?csvar:category.name ?><?cs if in_adm ?></a><?cs /if ?>21 <a href="<?cs var:href.base ?>/category/<?cs var:category.id ?>"><?cs 22 var:category.name ?><?cs if in_adm ?></a><?cs /if ?> 22 23 <?cs if !in_adm ?> 23 <a href="<?cs var:href.base ?>/notes/category/<?cs var:category.id ?>">24 <a href="<?cs var:href.base+href.filter ?>/notes/category/<?cs var:category.id ?>"> 24 25 <img alt="Category notes" src="<?cs var:chrome.href ?>/downloader/img/notes.png" /> 25 26 </a> … … 37 38 <td> </td> 38 39 <td colspan="4"> 39 < ?cs if in_adm ?><a href="<?cs var:href.base ?>/release/<?cs var:release.id ?>"><?cs /if ?>40 <a href="<?cs var:href.base ?>/release/<?cs var:release.id ?>"> 40 41 <?cs var:release.name ?> 41 42 <?cs if in_adm ?></a><?cs /if ?> 42 43 <?cs if !in_adm ?> 43 <a href="<?cs var:href.base ?>/notes/release/<?cs var:release.id ?>">44 <a href="<?cs var:href.base+href.filter ?>/notes/release/<?cs var:release.id ?>"> 44 45 <img alt="Release notes" src="<?cs var:chrome.href ?>/downloader/img/notes.png" /> 45 46 </a> … … 58 59 <td colspan="2"> </td> 59 60 <td> 60 <a href="<?cs var:href.base ?>/file/<?cs var:file.id ?>">61 <a href="<?cs var:href.base+href.filter ?>/file/<?cs var:file.id ?>"> 61 62 <?cs var:file.name_disp ?><?cs if:!file.name_disp ?>--<?cs /if ?> 62 63 </a> 63 64 <?cs if !in_adm ?> 64 <a href="<?cs var:href.base ?>/notes/file/<?cs var:file.id ?>">65 <a href="<?cs var:href.base+href.filter ?>/notes/file/<?cs var:file.id ?>"> 65 66 <img alt="File notes" src="<?cs var:chrome.href ?>/downloader/img/notes.png" /> 66 67 </a> tracdownloaderplugin/0.9/tracdownloader/web_ui.py
r2894 r2895 58 58 match = re.match( \ 59 59 '/downloader(?:/([^/]+))?(?:/([^/]+))?' + \ 60 '(?:/([^/]+))?(?:/([^/]+))?(?:/( .*)$)?', \60 '(?:/([^/]+))?(?:/([^/]+))?(?:/([^/]+))?(?:/(.*)$)?', \ 61 61 req.path_info) 62 62 if match: … … 71 71 req.args['arg_5'] = match.group(5) 72 72 self.arg_5 = match.group(5) 73 req.args['arg_6'] = match.group(6) 74 self.arg_6 = match.group(6) 73 75 return True 74 76 ''' 75 77 def _get_pages(self, req): 76 78 """Return a list of available admin pages.""" … … 78 80 pages.sort() 79 81 return pages 82 ''' 80 83 81 84 def process_request(self, req): … … 445 448 #self.env.log.info("Files: " + req.session.get('downloader_files')) 446 449 450 filter = None 451 f_id = None 447 452 if req.args.get('arg_2'): 448 453 arg_1 = req.args.get('arg_1') … … 450 455 arg_3 = req.args.get('arg_3') 451 456 arg_4 = req.args.get('arg_4') 457 arg_5 = req.args.get('arg_5') 458 arg_6 = req.args.get('arg_6') 452 459 if arg_2 == 'notes' and arg_3 and arg_4 != '': 453 460 self._render_note(req, arg_3, arg_4) 454 elif arg_2 == 'file' and arg_2 != '': 455 if self._serve_file(req, arg_3, arg_4): 461 elif arg_2 == 'file' and arg_3 != '': 462 href_base = self.env.href.downloader(arg_1, 463 arg_2) 464 if self._serve_file(req, arg_3, arg_4, href_base): 456 465 return None 466 elif arg_2 == 'release' or arg_2 == 'category' and arg_3 != '': 467 try: 468 f_id = int(arg_3) 469 filter = arg_2 470 except ValueError: 471 pass 472 req.hdf['href.filter'] = '/' + arg_2 + '/' + arg_3 473 if arg_4 == 'file' and arg_5 != '': 474 href_base = self.env.href.downloader(arg_1, 475 arg_2, 476 arg_3, 477 arg_4) 478 479 if self._serve_file(req, arg_5, arg_6, href_base): 480 return None 481 elif arg_4 == 'notes' and arg_5 and arg_6 != '': 482 self._render_note(req, arg_5, arg_6) 457 483 else: 458 484 # Test if session works 459 485 req.session['downloader_test'] = 'test' 460 486 461 render_downloads_table(self.env, req )487 render_downloads_table(self.env, req, filter=filter, f_id=f_id) 462 488 463 489 return 'downloader.cs', None 464 490 465 def _serve_file(self, req, id, file_name ):491 def _serve_file(self, req, id, file_name, href_base): 466 492 """ 467 493 Workarounds and decisions about what to do when file is clicked. … … 476 502 # Redirect to address with filename at the end 477 503 if file_name == '' or file_name == None: 478 req.redirect(self.env.href.downloader(self.arg_1, 479 'file', 480 id, 481 file.name)) 504 req.redirect(href_base + '/' + str(id) + '/' + file.name) 482 505 return False 483 506 … … 599 622 # Config defaults must be set 600 623 config_defaults(self, self.env) 624 625 if ns == 'downloader': 626 what = 'file' 627 try: 628 obj = File(self.env, int(target)) 629 except TracError, ValueError: 630 obj = None 631 elif ns == 'downloaderrel': 632 what = 'release' 633 try: 634 obj = Release(self.env, int(target)) 635 except TracError, ValueError: 636 obj = None 637 elif ns == 'downloadercat': 638 try: 639 obj = Category(self.env, int(target)) 640 except TracError, ValueError: 641 obj = None 642 what = 'category' 643 601 644 try: 602 645 # Try to use fancier code for Trac 10 603 646 from trac.util.html import html 604 return self._format_wiki_link_10(formatter, ns, target, label) 647 return self._format_wiki_link_10(formatter, ns, target, label, obj, 648 what) 605 649 except ImportError: 606 return self._format_wiki_link_09(formatter, ns, target, label) 607 608 def _format_wiki_link_10(self, formatter, ns, target, label): 609 try: 610 file = File(self.env, int(target)) 611 except TracError, ValueError: 650 return self._format_wiki_link_09(formatter, ns, target, label, obj, 651 what) 652 653 def _format_wiki_link_10(self, formatter, ns, target, label, obj, what): 654 from trac.util.html import html 655 656 if not obj: 612 657 return html.A(label, rel='nofollow', href='#', 613 title = 'File with this id not found.') 614 615 fname = file.name 658 title = '%s with this id not found.' %\ 659 capitalize(what)) 660 661 name = obj.name 616 662 if label == ns + ':' + target: 617 label = fname618 619 if file.deleted:663 label = name 664 665 if obj.deleted: 620 666 return html.A(label, rel='nofollow', href='#', 621 title='Sorry, file was deleted.')622 623 href = formatter.href.downloader('download', 'file', target, fname)667 title='Sorry, %s was deleted.' % what) 668 669 href = formatter.href.downloader('download', what, target, name) 624 670 return html.A(label, href=href) 625 671 626 def _format_wiki_link_09(self, formatter, ns, target, label): 627 try: 628 file = File(self.env, int(target)) 629 except TracError, ValueError: 672 def _format_wiki_link_09(self, formatter, ns, target, label, obj, what): 673 if not obj: 630 674 return ('<a href="%s" rel="%s" title="%s">%s</a>' % \ 631 675 ('#', 'nofollow', \ 632 ' File with this id not found.', label))633 634 fname = file.name676 '%s with this id not found.' % capitalize(what), label)) 677 678 name = obj.name 635 679 if label == ns + ':' + target: 636 label = fname637 638 if file.deleted:680 label = name 681 682 if obj.deleted: 639 683 return ('<a href="%s" rel="%s" title="%s">%s</a>' % \ 640 684 ('#', 'nofollow', \ 641 'Sorry, file was deleted.', label))642 643 href = formatter.href.downloader('download', 'file', target, fname)685 'Sorry, %s was deleted.' % what, label)) 686 687 href = formatter.href.downloader('download', what, target, name) 644 688 return ('<a href="%s">%s</a>' % (href, label)) 645 689 … … 667 711 668 712 def get_link_resolvers(self): 669 yield ('downloader', self._format_wiki_link) 713 return [('downloader', self._format_wiki_link), 714 ('downloaderrel', self._format_wiki_link), 715 ('downloadercat', self._format_wiki_link)] 670 716 671 717
