| | 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 | |
|---|
| 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 | |
|---|