Projet

Général

Profil

0001-fields-display-ItemsField-using-ul-on-summary-page-4.patch

Emmanuel Cazenave, 02 mars 2021 18:41

Télécharger (2,97 ko)

Voir les différences:

Subject: [PATCH] fields: display ItemsField using <ul> on summary page
 (#44123)

 tests/test_fields.py              | 14 ++++++++++++++
 wcs/fields.py                     | 19 +++++++++++++++++++
 wcs/qommon/static/css/qommon.scss |  4 ++++
 3 files changed, 37 insertions(+)
tests/test_fields.py
155 155
    assert field.get_options() == [('1', 'foo', '1'), ('2', 'bar', '2')]
156 156
    assert field.get_options() == [('1', 'foo', '1'), ('2', 'bar', '2')]  # twice for cached behaviour
157 157

  
158
    # html display
159
    view_value = fields.ItemsField(items=['a', 'b', 'c']).get_view_value('a, b', value_id=['a', 'b'])
160
    elems = BeautifulSoup(str(view_value)).find('ul').find_all('li')
161
    assert len(elems) == 2
162
    assert elems[0].text == 'a'
163
    assert elems[1].text == 'b'
164

  
165
    field = fields.ItemsField()
166
    view_value = field.get_view_value('a, b', value_id=['1', '2'], text=['a', 'b'])
167
    elems = BeautifulSoup(str(view_value)).find('ul').find_all('li')
168
    assert len(elems) == 2
169
    assert elems[0].text == 'a'
170
    assert elems[1].text == 'b'
171

  
158 172

  
159 173
def test_password():
160 174
    assert fields.PasswordField().get_view_value('xxx') == '●' * 8
wcs/fields.py
2224 2224
        except TypeError:
2225 2225
            raise ValueError('invalid data for items type (%r)' % value)
2226 2226

  
2227
    def get_value_info(self, data):
2228
        value, value_details = super().get_value_info(data)
2229
        structured_values = self.get_structured_value(data)
2230
        if structured_values:
2231
            value_details['text'] = []
2232
            for structured_value in structured_values:
2233
                value_details['text'].append(structured_value['text'])
2234
        return (value, value_details)
2235

  
2227 2236
    def get_view_value(self, value, **kwargs):
2237
        if 'value_id' in kwargs:
2238
            # summary page
2239
            labels = kwargs.get('text') or kwargs['value_id']
2240
            r = TemplateIO(html=True)
2241
            r += htmltext('<ul>')
2242
            for x in labels:
2243
                r += htmltext('<li>%s</li>' % x)
2244
            r += htmltext('</ul>')
2245
            return r.getvalue()
2246

  
2228 2247
        if type(value) is str:  # == display_value
2229 2248
            return value
2230 2249
        if value:
wcs/qommon/static/css/qommon.scss
299 299
div.dataview .value {
300 300
	display: block;
301 301
	margin-left: 1em;
302
	ul {
303
		margin-top: 0;
304
		margin-bottom : 0;
305
	}
302 306
}
303 307

  
304 308
form div.page,
305
-