Changeset 3880

Show
Ignore:
Timestamp:
06/21/08 11:08:28 (3 months ago)
Author:
athomas
Message:

Reimplement descriptions for tagged objects. Fixes #2749.

Note: This is a tag provider API change.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • tagsplugin/trunk/tractags/api.py

    r3878 r3880  
    4848        """Remove all tags from a resource.""" 
    4949 
     50    def describe_tagged_resource(resource): 
     51        """Return a one line description of the tagged resource.""" 
     52 
    5053 
    5154class DefaultTagProvider(Component): 
     
    154157            raise 
    155158 
     159    def describe_tagged_resource(self, resource): 
     160        return '' 
     161 
    156162 
    157163class TagSystem(Component): 
     
    235241        return set([t.strip() for t in self._tag_split.split(text) if t.strip()]) 
    236242 
     243    def describe_tagged_resource(self, resource): 
     244        """Return a short description of a taggable resource.""" 
     245        provider = self._get_provider(resource.realm) 
     246        if hasattr(provider, 'describe_tagged_resource'): 
     247            return provider.describe_tagged_resource(resource) 
     248        else: 
     249            return '' 
     250 
    237251    # IPermissionRequestor methods 
    238252    def get_permission_actions(self): 
  • tagsplugin/trunk/tractags/macros.py

    r3875 r3880  
    7373    def expand_macro(self, formatter, name, content): 
    7474        req = formatter.req 
    75         query_result = TagSystem(self.env).query(req, content) 
     75        tag_system = TagSystem(self.env) 
     76        query_result = tag_system.query(req, content) 
    7677        add_stylesheet(req, 'tags/css/tractags.css') 
    7778 
     
    8485                                     key=lambda r: unicode(r[0].id)): 
    8586            tags = sorted(tags) 
     87 
     88            desc = tag_system.describe_tagged_resource(resource) 
     89 
    8690            if tags: 
    8791                rendered_tags = [ 
     
    8993                    for tag in tags 
    9094                    ] 
    91                 li = builder.li(link(resource), ' (', rendered_tags[0], 
     95                li = builder.li(link(resource), ' ', desc, ' (', rendered_tags[0], 
    9296                                [(' ', tag) for tag in rendered_tags[1:]], 
    9397                                ')') 
    9498            else: 
    95                 li = builder.li(link(resource)
     99                li = builder.li(link(resource), ' ', desc
    96100            ul(li, '\n') 
    97101        return ul 
  • tagsplugin/trunk/tractags/ticket.py

    r3033 r3880  
    9898        ticket.save_changes(req.username, u'') 
    9999 
     100    def describe_tagged_resource(self, resource): 
     101        assert resource.realm == 'ticket' 
     102        ticket = Ticket(self.env, resource.id) 
     103        if ticket.exists: 
     104            return '%s (%s)' % (ticket['summary'], ticket['status']) 
     105        else: 
     106            return '' 
     107 
    100108    # Private methods 
    101109    def _ticket_tags(self, ticket): 
  • tagsplugin/trunk/tractags/wiki.py

    r3879 r3880  
    77# 
    88 
     9import re 
    910from trac.core import * 
    1011from tractags.api import DefaultTagProvider, TagSystem 
     
    1516from trac.web.api import ITemplateStreamFilter 
    1617from trac.wiki.api import IWikiPageManipulator, IWikiChangeListener 
     18from trac.wiki.model import WikiPage 
    1719from trac.util.compat import sorted 
    1820from genshi.builder import tag 
     
    2426    realm = 'wiki' 
    2527 
     28    first_head = re.compile('=\s+([^=]*)=')  
     29 
    2630    def check_permission(self, perm, operation): 
    2731        map = {'view': 'WIKI_VIEW', 'modify': 'WIKI_MODIFY'} 
    2832        return super(WikiTagProvider, self).check_permission(perm, operation) \ 
    2933            and map[operation] in perm 
     34 
     35    def describe_tagged_resource(self, resource): 
     36        assert resource.realm == 'wiki' 
     37        page = WikiPage(self.env, resource.id) 
     38        if page.exists: 
     39            ret = self.first_head.search(page.text) 
     40            return ret and ret.group(1) or '' 
     41        return '' 
    3042 
    3143