Changeset 4177
- Timestamp:
- 08/24/08 20:56:26 (5 months ago)
- Files:
-
- masterticketsplugin/0.11/mastertickets/util.py (modified) (2 diffs)
- masterticketsplugin/0.11/mastertickets/web_ui.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
masterticketsplugin/0.11/mastertickets/util.py
r2924 r4177 1 1 from trac.ticket.model import Ticket 2 2 from trac.resource import ResourceNotFound 3 3 from trac.util.compat import set 4 4 from genshi.builder import tag 5 5 … … 16 16 del data[-1] # Remove the last comma if needed 17 17 return tag.span(*data) 18 19 def diff_lists(a, b): 20 """Return two sets containing the numbers added and removed between the 21 two lists. 22 """ 23 a = set([int(n) for n in a]) 24 b = set([int(n) for n in b]) 25 return a - b, b - a 26 masterticketsplugin/0.11/mastertickets/web_ui.py
r3937 r4177 2 2 3 3 from pkg_resources import resource_filename 4 from genshi.core import Markup 4 from genshi.core import Markup, START, END, TEXT 5 5 from genshi.builder import tag 6 6 from genshi.filters.transform import Transformer … … 34 34 35 35 FIELD_XPATH = 'div[@id="ticket"]/table[@class="properties"]/td[@headers="h_%s"]/text()' 36 fields = set(['blocking', 'blockedby']) 36 37 37 38 # IRequestFilter methods … … 67 68 for field, value in data['mastertickets']['field_values'].iteritems(): 68 69 stream |= Transformer(self.FIELD_XPATH % field).replace(value) 70 if req.path_info.startswith('/ticket'): 71 pass 72 #stream |= Transformer('//ul[@class="changes"]/li').apply(self._change_filter()) 69 73 return stream 70 74 … … 166 170 167 171 return g 172 173 def _change_filter(self): 174 flag = [0] 175 name = [] 176 buf = [] 177 def _inner(stream): 178 for mark, (kind, data, pos) in stream: 179 if mark: 180 if flag[0] == 0 and kind is START and data[0].localname == 'strong': 181 flag[0] = 1 182 elif flag[0] == 1 and kind is TEXT: 183 if data.strip() in self.fields: 184 name.append(data.strip()) 185 flag[0] = 2 186 else: 187 flag[0] = 0 188 elif flag[0] == 2 and kind is START and data[0].localname == 'em': 189 flag[0] = 3 190 elif flag[0] == 3 and kind is TEXT: 191 buf.append(data) 192 if len(data) >= 2: 193 flag[0] = 4 194 else: 195 flag[0] = 2 196 elif kind is END and data.localname == 'li': 197 flag[0] = 5 198 199 if flag[0] == 0: 200 yield True, (kind, data, pos) 201 elif flag[0] == 5: 202 if len(buf) == 0: 203 add, sub = None, True 204 elif len(buf) == 1: 205 add, sub = buf[0], False 206 else: 207 add, sub = diff_lists(*buf) 208 del buf[:] 209 elms = tag(tag.strong(name[0])) 210 211 if add and not sub: 212 elms.append() 213 elif add: 214 elms.append( 215 tag.em(u', '.join([unicode(n) for n in sorted(add)])) 216 ) 217 elms.append(u' added') 218 if add and sub: 219 elms.append(u'; ') 220 if sub: 221 elms.append( 222 tag.em(u', '.join([unicode(n) for n in sorted(sub)])) 223 ) 224 elms.append(u' removed') 225 for x in elms.generate(): 226 yield True, x 227 yield True, (kind, data, pos) 228 229 else: 230 yield False, (kind, data, pos) 231 return _inner
