0002-fields-display-ItemsField-using-ul-on-summary-page-i.patch
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 |
# if labels are available, display using <ul> |
|
159 |
field = fields.ItemsField() |
|
160 |
view_value = field.get_view_value('a, b', value_id=['1', '2'], labels=['a', 'b']) |
|
161 |
elems = BeautifulSoup(str(view_value)).find('ul').find_all('li') |
|
162 |
assert len(elems) == 2 |
|
163 |
assert elems[0].text == 'a' |
|
164 |
assert elems[1].text == 'b' |
|
165 | ||
166 | ||
167 |
def test_items_get_value_info(): |
|
168 |
# no data source : labels are available |
|
169 |
field = fields.ItemsField(id='1', items=['a', 'b', 'c']) |
|
170 |
assert field.get_value_info({'1': ['un', 'deux'], '1_display': 'un, deux'}) == ( |
|
171 |
'un, deux', |
|
172 |
{'value_id': ['un', 'deux'], 'labels': ['un', 'deux']}, |
|
173 |
) |
|
174 | ||
175 |
# data source with structured : labels are available |
|
176 |
field = fields.ItemsField(id='1') |
|
177 |
field.data_source = {'type': 'formula', 'value': '''[('1', 'un'), ('2', 'deux')]'''} |
|
178 |
assert field.get_value_info( |
|
179 |
{ |
|
180 |
'1': ['un', 'deux'], |
|
181 |
'1_display': 'un, deux', |
|
182 |
'1_structured': [{'id': '1', 'text': 'un'}, {'id': '2', 'text': 'deux'}], |
|
183 |
} |
|
184 |
) == ( |
|
185 |
'un, deux', |
|
186 |
{'value_id': ['un', 'deux'], 'labels': ['un', 'deux']}, |
|
187 |
) |
|
188 | ||
189 |
# data source with no strucured : no labels |
|
190 |
field = fields.ItemsField(id='1') |
|
191 |
field.data_source = {'type': 'formula', 'value': '''[('1', 'un'), ('2', 'deux')]'''} |
|
192 |
assert field.get_value_info({'1': ['un', 'deux'], '1_display': 'un, deux'}) == ( |
|
193 |
'un, deux', |
|
194 |
{'value_id': ['un', 'deux'], 'labels': []}, |
|
195 |
) |
|
196 | ||
158 | 197 | |
159 | 198 |
def test_password(): |
160 | 199 |
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 |
labels = [] |
|
2230 |
if not self.data_source: |
|
2231 |
value_id = value_details.get('value_id') |
|
2232 |
if value_id: |
|
2233 |
labels = value_id.copy() |
|
2234 |
else: |
|
2235 |
structured_values = self.get_structured_value(data) |
|
2236 |
if structured_values: |
|
2237 |
labels = [x['text'] for x in structured_values] |
|
2238 |
value_details['labels'] = labels |
|
2239 |
return (value, value_details) |
|
2240 | ||
2227 | 2241 |
def get_view_value(self, value, **kwargs): |
2242 |
if kwargs.get('labels'): |
|
2243 |
# summary page and labels are available |
|
2244 |
r = TemplateIO(html=True) |
|
2245 |
r += htmltext('<ul>') |
|
2246 |
for x in kwargs['labels']: |
|
2247 |
r += htmltext('<li>%s</li>' % x) |
|
2248 |
r += htmltext('</ul>') |
|
2249 |
return r.getvalue() |
|
2250 | ||
2228 | 2251 |
if type(value) is str: # == display_value |
2229 | 2252 |
return value |
2230 | 2253 |
if value: |
wcs/qommon/static/css/qommon.scss | ||
---|---|---|
301 | 301 |
margin-left: 1em; |
302 | 302 |
} |
303 | 303 | |
304 |
div.dataview div.field-type-items .value ul { |
|
305 |
margin-top: 0; |
|
306 |
margin-bottom : 0; |
|
307 |
} |
|
308 | ||
304 | 309 |
div.dataview .field-type-block > .value { |
305 | 310 |
margin-left: 0; |
306 | 311 |
} |
307 |
- |