Changeset 2058
- Timestamp:
- 02/27/07 22:31:14 (2 years ago)
- Files:
-
- tagsplugin/branches/filter/tractags/web_ui.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
tagsplugin/branches/filter/tractags/web_ui.py
r2055 r2058 1 1 from trac.core import * 2 2 from trac.web.main import IRequestHandler 3 from trac.web.chrome import ITemplateProvider, INavigationContributor 3 from trac.web.chrome import ITemplateProvider, INavigationContributor, add_stylesheet 4 4 from trac.web.api import IStreamFilter, IRequestFilter 5 5 from trac.util import Markup … … 7 7 from trac.wiki.web_ui import WikiModule 8 8 from trac.wiki.formatter import wiki_to_oneliner 9 from trac.wiki.model import WikiPage 10 9 11 from genshi.builder import tag 10 12 from genshi.core import START, END … … 85 87 def match_stream(self, req, stream, method): 86 88 return req.path_info.startswith('/wiki') and \ 87 req.args.get('action' ) == 'edit'and \89 req.args.get('action','view') in ('edit', 'view') and \ 88 90 method == 'xhtml' 89 91 90 92 def process_stream(self, req, stream, method): 91 93 page_name = req.path_info[6:] or 'WikiStart' 92 stage = 1 94 tags = TagEngine(self.env).tagspace.wiki.get_tags([page_name]) 95 action = req.args.get('action','view') 96 if action == 'edit': 97 return self._process_edit(req, stream, method, tags) 98 elif action == 'view': 99 return self._process_view(req, stream, method, tags) 100 101 102 def _process_edit(self, req, stream, method, tags): 103 stage = 1 93 104 elm = tag.div([tag.label('Tag under: (', 94 105 tag.a('view all tags', href=req.href.tags()), 95 ')',96 for_='tags'),106 ')', 107 for_='tags'), 97 108 tag.br(), 98 109 tag.input(title='Comma separated list of tags', … … 101 112 size='30', 102 113 name='tags', 103 value=', '.join( TagEngine(self.env).tagspace.wiki.get_tags([page_name]))114 value=', '.join(tags) 104 115 ), 105 116 ], class_='field') 106 107 117 for kind, data, pos in stream: 108 118 yield kind, data, pos … … 118 128 yield e 119 129 stage = None 130 131 def _process_view(self, req, stream, method, tags): 132 stage = 1 133 div_count = 1 134 135 def tag_data(): 136 engine = TagEngine(self.env) 137 for t in tags: 138 href, title = engine.get_tag_link(t) 139 yield t, href, title 140 141 elm = tag.ul(tags and tag.lh('Tags'), 142 [tag.li(tag.a(t, href=href, title=title), ' ') for t, href, title in tag_data()], 143 class_='tags') 144 145 for kind, data, pos in stream: 146 yield kind, data, pos 147 if stage == 1 and \ 148 kind is START and \ 149 data[0].localname == 'div' and \ 150 'wikipage' in data[1].get('class', ''): 151 stage = 2 152 elif stage == 2: 153 if kind is START and data[0].localname == 'div': 154 div_count += 1 155 elif kind is END and data.localname == 'div': 156 div_count -= 1 157 158 if not div_count: 159 for e in elm.generate(): 160 yield e 161 stage = None 162 120 163 121 164 # IRequestFilter methods 122 165 def pre_process_request(self, req, handler): 166 tags = req.args.get('tags') 167 if isinstance(handler, WikiModule): 168 add_stylesheet(req, 'tags/css/tractags.css') 123 169 170 if req.method == 'POST' and tags is not None: 171 page_name = req.path_info[6:] or 'WikiStart' 172 new_tags = set([t.strip() for t in tags.split(',') if t.strip()]) 173 old_tags = TagEngine(self.env).tagspace.wiki.get_tags([page_name]) 174 if old_tags != new_tags: 175 TagEngine(self.env).tagspace.wiki.replace_tags(req, page_name, new_tags) 176 if req.args.get('text') == WikiPage(self.env, page_name).text: 177 # The wiki module would think this is wasn't changed, 178 # so redirect around it. 179 req.redirect(req.href.wiki(page_name)) 180 return handler 181 182 def post_process_request(self, req, template, data, content_type): 183 return template, data, content_type 124 184 125 185 class TagsModule(Component):
