Projet

Général

Profil

0001-misc-strip-html-from-field-labels-when-displayed-in-.patch

Frédéric Péters, 02 mars 2016 17:19

Télécharger (6,33 ko)

Voir les différences:

Subject: [PATCH] misc: strip html from field labels when displayed in
 backoffice (#9837)

 tests/test_fields.py |  6 ++++++
 wcs/admin/fields.py  |  9 ++++-----
 wcs/admin/forms.py   | 13 ++++++-------
 wcs/fields.py        |  6 ++++++
 4 files changed, 22 insertions(+), 12 deletions(-)
tests/test_fields.py
1
# -*- coding: utf-8 -*-
2

  
1 3
import shutil
2 4

  
3 5
import pytest
......
139 141
    form = Form()
140 142
    field.add_to_form(form)
141 143
    assert '<p>Foobar</p>' in str(form.render())
144
    assert field.unhtmled_label == 'Foobar'
145

  
146
    field = fields.CommentField(label='<p>Foobar&eacute;</p>')
147
    assert field.unhtmled_label == u'Foobaré'
142 148

  
143 149
def test_map():
144 150
    assert fields.MapField().get_json_value('42.2;10.2') == {'lat': 42.2, 'lon': 10.2}
wcs/admin/fields.py
42 42
            raise errors.TraversalError()
43 43
        if not self.field.label:
44 44
            self.field.label = _('None')
45
        self.unhtmled_label = re.sub('<.*?>', ' ', self.field.label)
46
        label = misc.ellipsize(self.unhtmled_label, 40)
45
        label = misc.ellipsize(self.field.unhtmled_label, 40)
47 46
        get_response().breadcrumb.append((field_id + '/', label))
48 47

  
49 48
    def form(self):
......
80 79
        if redo or not form.get_submit() == 'submit':
81 80
            self.html_top('%s - %s' % (_('Form'), self.objectdef.name))
82 81
            r = TemplateIO(html=True)
83
            r += htmltext('<h2>%s - %s</h2>') % (self.objectdef.name, self.unhtmled_label)
82
            r += htmltext('<h2>%s - %s</h2>') % (self.objectdef.name, self.field.unhtmled_label)
84 83
            r += form.render()
85 84
            return r.getvalue()
86 85
        else:
......
113 112
            get_response().breadcrumb.append(('delete', _('Delete')))
114 113
            self.html_top(title = _('Delete Field'))
115 114
            r = TemplateIO(html=True)
116
            r += htmltext('<h2>%s %s</h2>') % (_('Deleting Field:'), self.unhtmled_label)
115
            r += htmltext('<h2>%s %s</h2>') % (_('Deleting Field:'), self.field.unhtmled_label)
117 116
            r += form.render()
118 117
            return r.getvalue()
119 118
        else:
......
230 229
                except IndexError:
231 230
                    type_label = _('Unknown')
232 231
                if field.type in ('subtitle', 'title', 'comment'):
233
                    label = misc.ellipsize(field.label, 60)
232
                    label = misc.ellipsize(field.unhtmled_label, 60)
234 233
                    if field.type in ('subtitle', 'title'):
235 234
                        r += htmltext('<strong id="label%s">%s</strong>') % (field.id, label)
236 235
                    else:
wcs/admin/forms.py
939 939
        r += htmltext('<div id="form-diff">')
940 940
        r += htmltext('<div>')
941 941
        r += htmltext('<table id="table-diff">')
942
        def ellipsize_html(label):
943
            unhtmled_label = re.sub('<.*?>', ' ', label)
944
            return misc.ellipsize(unhtmled_label, 60)
942
        def ellipsize_html(field):
943
            return misc.ellipsize(field.unhtmled_label, 60)
945 944

  
946 945
        for diffinfo in difflib.ndiff(current_fields_list, new_fields_list):
947 946
            if diffinfo[0] == '?':
......
950 949
            field_id = diffinfo[2:].split()[0]
951 950
            if diffinfo[0] == ' ':
952 951
                # unchanged line
953
                label1 = ellipsize_html(current_fields.get(field_id).label)
954
                label2 = ellipsize_html(new_fields.get(field_id).label)
952
                label1 = ellipsize_html(current_fields.get(field_id))
953
                label2 = ellipsize_html(new_fields.get(field_id))
955 954
                if current_fields.get(field_id) and new_fields.get(field_id) and \
956 955
                        current_fields.get(field_id).type != new_fields.get(field_id).type:
957 956
                    r += htmltext('<tr class="type-change"><td class="indicator">!</td>')
......
964 963
                r += htmltext('<td>%s</td> <td>%s</td></tr>') % (label1, label2)
965 964
            elif diffinfo[0] == '-':
966 965
                # removed field
967
                label1 = ellipsize_html(current_fields.get(field_id).label)
966
                label1 = ellipsize_html(current_fields.get(field_id))
968 967
                if current_fields.get(field_id) and new_fields.get(field_id) and \
969 968
                        current_fields.get(field_id).type != new_fields.get(field_id).type:
970 969
                    r += htmltext('<tr class="type-change"><td class="indicator">!</td>')
......
973 972
                r += htmltext('<td>%s</td> <td></td></tr>') % label1
974 973
            elif diffinfo[0] == '+':
975 974
                # added field
976
                label2 = ellipsize_html(new_fields.get(field_id).label)
975
                label2 = ellipsize_html(new_fields.get(field_id))
977 976
                if current_fields.get(field_id) and new_fields.get(field_id) and \
978 977
                        current_fields.get(field_id).type != new_fields.get(field_id).type:
979 978
                    r += htmltext('<tr class="type-change"><td class="indicator">!</td>')
wcs/fields.py
21 21
import base64
22 22
import xml.etree.ElementTree as ET
23 23
import collections
24
from HTMLParser import HTMLParser
24 25

  
25 26
from quixote import get_request, get_publisher
26 27
from quixote.html import htmltext, TemplateIO
......
155 156
        pass
156 157
    init = classmethod(init)
157 158

  
159
    @property
160
    def unhtmled_label(self):
161
        return HTMLParser().unescape(unicode(
162
            re.sub('<.*?>', ' ', self.label), get_publisher().site_charset)).strip()
163

  
158 164
    def get_admin_attributes(self):
159 165
        return ['label', 'type']
160 166

  
161
-