Changeset 4177

Show
Ignore:
Timestamp:
08/24/08 20:56:26 (5 months ago)
Author:
coderanger
Message:

Checkpoint, doing things stupidly.

Files:

Legend:

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

    r2924 r4177  
    11from trac.ticket.model import Ticket 
    22from trac.resource import ResourceNotFound 
    3  
     3from trac.util.compat import set 
    44from genshi.builder import tag 
    55 
     
    1616        del data[-1] # Remove the last comma if needed 
    1717    return tag.span(*data) 
     18 
     19def 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  
    22 
    33from pkg_resources import resource_filename 
    4 from genshi.core import Markup 
     4from genshi.core import Markup, START, END, TEXT 
    55from genshi.builder import tag 
    66from genshi.filters.transform import Transformer 
     
    3434     
    3535    FIELD_XPATH = 'div[@id="ticket"]/table[@class="properties"]/td[@headers="h_%s"]/text()' 
     36    fields = set(['blocking', 'blockedby']) 
    3637     
    3738    # IRequestFilter methods 
     
    6768            for field, value in data['mastertickets']['field_values'].iteritems(): 
    6869                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()) 
    6973        return stream 
    7074         
     
    166170         
    167171        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