Changeset 4178

Show
Ignore:
Timestamp:
08/24/08 21:05:50 (5 months ago)
Author:
coderanger
Message:

Nicely render changes to mastertickets fields.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • masterticketsplugin/0.11/mastertickets/util.py

    r4177 r4178  
    1717    return tag.span(*data) 
    1818 
    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

    r4177 r4178  
    6161                add_ctxtnav(req, 'Depgraph', req.href.depgraph(tkt.id)) 
    6262             
     63            for change in data.get('changes', []): 
     64                for field, field_data in change['fields'].iteritems(): 
     65                    if field in self.fields: 
     66                        if field_data['new'].strip(): 
     67                            new = set([int(n) for n in field_data['new'].split(',')]) 
     68                        else: 
     69                            new = set() 
     70                        if field_data['old'].strip(): 
     71                            old = set([int(n) for n in field_data['old'].split(',')]) 
     72                        else: 
     73                            old = set() 
     74                        add = new - old 
     75                        sub = old - new 
     76                        elms = tag() 
     77                        if add: 
     78                            elms.append( 
     79                                tag.em(u', '.join([unicode(n) for n in sorted(add)])) 
     80                            ) 
     81                            elms.append(u' added') 
     82                        if add and sub: 
     83                            elms.append(u'; ') 
     84                        if sub: 
     85                            elms.append( 
     86                                tag.em(u', '.join([unicode(n) for n in sorted(sub)])) 
     87                            ) 
     88                            elms.append(u' removed') 
     89                        field_data['rendered'] = elms 
     90             
    6391        return template, data, content_type 
    6492         
     
    6896            for field, value in data['mastertickets']['field_values'].iteritems(): 
    6997                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()) 
    7398        return stream 
    7499         
     
    170195         
    171196        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 
     197