def process_request(self, req): from tractags.api import TagEngine from trac.web.chrome import add_stylesheet add_stylesheet(req, 'tags/css/tractags.css') pagename = req.args.get('page', 'WikiStart') action = req.args.get('action', 'view') engine = TagEngine(self.env) wikitags = engine.tagspace.wiki tags = list(wikitags.get_tags([pagename])) tags.sort() if action == 'edit': req.hdf['tags'] = req.args.get('tags', ', '.join(tags)) elif action == 'view': hdf_tags = [] for tag in tags: href, title = engine.get_tag_link(tag) hdf_tags.append({'name': tag, 'href': href, 'title': title}) req.hdf['tags'] = hdf_tags result = WikiModule.process_request(self, req) if result is None: return None if result[0] == 'wiki.cs': return 'tagswiki.cs', None return result
def render_listtags(self, req, *tags, **kwargs): """ List tags. For backwards compatibility, can accept a list of tags. This will simply call ListTagged. Optional keyword arguments are tagspace=wiki, tagspaces=(wiki, ticket, ...) and shownames=true. """ if tags: # Backwards compatibility return self.render_listtagged(req, *tags, **kwargs) page = self._current_page(req) engine = TagEngine(self.env) showpages = kwargs.get('showpages', None) or kwargs.get('shownames', 'false') if 'tagspace' in kwargs: tagspaces = [kwargs['tagspace']] else: tagspaces = kwargs.get('tagspaces', []) or \ list(TagEngine(self.env).tagspaces) out = StringIO() out.write('<ul class="listtags">\n') tag_details = {} for tag, names in sorted(engine.get_tags(tagspaces=tagspaces, detailed=True).iteritems()): href, title = engine.get_tag_link(tag) htitle = wiki_to_oneliner(title, self.env) out.write('<li><a href="%s" title="%s">%s</a> %s <span class="tagcount">(%i)</span>' % (href, title, tag, htitle, len(names))) if showpages == 'true': out.write('\n') out.write(self.render_listtagged(req, tag, tagspaces=tagspaces)) out.write('</li>\n') out.write('</ul>\n') return out.getvalue()
def _wiki_view(self, req, stream): tags = self._page_tags(req) if not tags: return stream engine = TagEngine(self.env) add_stylesheet(req, 'tags/css/tractags.css') li = [] for tag in tags: href, title = engine.get_tag_link(tag) li.append(T.li(T.a(title=title, href=href)(tag), ' ')) insert = T.ul(class_='tags')(T.lh('Tags'), li) return stream | Transformer('//div[@class="buttons"]').before(insert)
def _prepare_wiki(self, req): from tractags.api import TagEngine page = req.path_info[6:] or 'WikiStart' engine = TagEngine(self.env) wikitags = engine.tagspace.wiki tags = list(wikitags.get_tags(page)) tags.sort() action = req.args.get('action', 'view') if action == 'edit': req.hdf['tags'] = req.args.get('tags', ', '.join(tags)) elif action == 'view': hdf_tags = [] for tag in tags: href, title = engine.get_tag_link(tag) hdf_tags.append({'name': tag, 'href': href, 'title': title}) req.hdf['tags'] = hdf_tags
def render_listtags(self, req, *tags, **kwargs): """ List all tags. ||'''Argument'''||'''Description'''|| ||`tagspace=<tagspace>`||Specify the tagspace the macro should operate on.|| ||`tagspaces=(<tagspace>,...)`||Specify a set of tagspaces the macro should operate on.|| ||`shownames=true|false`||Whether to show the objects that tags appear on ''(long)''.|| """ if tags: # Backwards compatibility return self.render_listtagged(req, *tags, **kwargs) page = self._current_page(req) engine = TagEngine(self.env) showpages = kwargs.get('showpages', None) or kwargs.get( 'shownames', 'false') if 'tagspace' in kwargs: tagspaces = [kwargs['tagspace']] else: tagspaces = kwargs.get('tagspaces', []) or \ list(TagEngine(self.env).tagspaces) out = StringIO() out.write('<ul class="listtags">\n') tag_details = {} for tag, names in sorted( engine.get_tags(tagspaces=tagspaces, detailed=True).iteritems()): href, title = engine.get_tag_link(tag) htitle = wiki_to_oneliner(title, self.env, req=req) out.write( '<li><a href="%s" title="%s">%s</a> %s <span class="tagcount">(%i)</span>' % (href, title, tag, htitle, len(names))) if showpages == 'true': out.write('\n') out.write(self.render_listtagged(req, tag, tagspaces=tagspaces)) out.write('</li>\n') out.write('</ul>\n') return out.getvalue()
def render_listtags(self, req, *tags, **kwargs): """ List tags. For backwards compatibility, can accept a list of tags. This will simply call ListTagged. Optional keyword arguments are tagspace=wiki, tagspaces=(wiki, ticket, ...) and shownames=true. """ if tags: # Backwards compatibility return self.render_listtagged(req, *tags, **kwargs) page = self._current_page(req) engine = TagEngine(self.env) showpages = kwargs.get('showpages', None) or kwargs.get( 'shownames', 'false') if 'tagspace' in kwargs: tagspaces = [kwargs['tagspace']] else: tagspaces = kwargs.get('tagspaces', []) or \ list(TagEngine(self.env).tagspaces) out = StringIO() out.write('<ul class="listtags">\n') tag_details = {} for tag, names in sorted( engine.get_tags(tagspaces=tagspaces, detailed=True).iteritems()): href, title = engine.get_tag_link(tag) htitle = wiki_to_oneliner(title, self.env) out.write( '<li><a href="%s" title="%s">%s</a> %s <span class="tagcount">(%i)</span>' % (href, title, tag, htitle, len(names))) if showpages == 'true': out.write('\n') out.write(self.render_listtagged(req, tag, tagspaces=tagspaces)) out.write('</li>\n') out.write('</ul>\n') return out.getvalue()
def render_listtags(self, req, *tags, **kwargs): """ List all tags. ||'''Argument'''||'''Description'''|| ||`tagspace=<tagspace>`||Specify the tagspace the macro should operate on.|| ||`tagspaces=(<tagspace>,...)`||Specify a set of tagspaces the macro should operate on.|| ||`shownames=true|false`||Whether to show the objects that tags appear on ''(long)''.|| """ if tags: # Backwards compatibility return self.render_listtagged(req, *tags, **kwargs) page = self._current_page(req) engine = TagEngine(self.env) showpages = kwargs.get('showpages', None) or kwargs.get('shownames', 'false') if 'tagspace' in kwargs: tagspaces = [kwargs['tagspace']] else: tagspaces = kwargs.get('tagspaces', []) or \ list(TagEngine(self.env).tagspaces) out = StringIO() out.write('<ul class="listtags">\n') tag_details = {} for tag, names in sorted(engine.get_tags(tagspaces=tagspaces, detailed=True).iteritems()): href, title = engine.get_tag_link(tag) htitle = wiki_to_oneliner(title, self.env) out.write('<li><a href="%s" title="%s">%s</a> %s <span class="tagcount">(%i)</span>' % (href, title, tag, htitle, len(names))) if showpages == 'true': out.write('\n') out.write(self.render_listtagged(req, tag, tagspaces=tagspaces)) out.write('</li>\n') out.write('</ul>\n') return out.getvalue()