Projet

Général

Profil

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

Emmanuel Cazenave, 03 mars 2021 16:21

Télécharger (3,09 ko)

Voir les différences:

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

 tests/test_fields.py              |  7 +++++++
 wcs/fields.py                     | 20 ++++++++++++++++++--
 wcs/qommon/static/css/qommon.scss |  4 ++++
 3 files changed, 29 insertions(+), 2 deletions(-)
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
    field = fields.ItemsField()
159
    view_value = field.get_view_value('a, b', value_id=['1', '2'], labels=['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

  
158 165

  
159 166
def test_password():
160 167
    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['labels'] = []
2232
            for structured_value in structured_values:
2233
                value_details['labels'].append(structured_value['text'])
2234
        return (value, value_details)
2235

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

  
2228 2246
        if type(value) is str:  # == display_value
2229 2247
            return value
2230 2248
        if value:
......
2297 2315
        structured_options = data_sources.get_structured_items(self.data_source)
2298 2316
        if not structured_options:
2299 2317
            return
2300
        if not set(structured_options[0].keys()) != set(['id', 'text']):
2301
            return
2302 2318
        structured_value = []
2303 2319
        for structured_option in structured_options:
2304 2320
            for choice in data.get(field_id) or []:
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
-