Skip to content

Commit 8aa304f

Browse files
committed
Introduce display_class widget property
1 parent d9c222a commit 8aa304f

File tree

5 files changed

+28
-9
lines changed

5 files changed

+28
-9
lines changed

CHANGES.rst

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ History
55
3.1.2 (unreleased)
66
------------------
77

8-
- Nothing changed yet.
8+
- Introduce ``display_class`` widget property. Display renderers will add the
9+
given value to the widget class list.
10+
[lenadax]
911

1012

1113
3.1.1 (2024-11-08)

src/yafowil/checkbox.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,13 @@ def checkbox_display_renderer(widget, data):
8787
content = vocab[bool(value)]
8888
if data.tag.translate:
8989
content = data.tag.translate(content)
90+
cssclasses = [
91+
attr_value("display_class", widget, data),
92+
f'display-{attr_value("class", widget, data) or "generic"}'
93+
]
9094
attrs = {
9195
'id': cssid(widget, 'display'),
92-
'class_': 'display-{0}'.format(attr_value('class', widget, data))
96+
'class_': ' '.join([_ for _ in cssclasses if _ is not None])
9397
}
9498
if attr_value('display_proxy', widget, data):
9599
widget.attrs['type'] = 'hidden'

src/yafowil/common.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -263,11 +263,13 @@ def generic_display_renderer(widget, data, value=None):
263263
content = widget.attrs['template'] % value
264264
else:
265265
content = widget.attrs['template'] % value
266+
cssclasses = [
267+
attr_value("display_class", widget, data),
268+
f'display-{attr_value("class", widget, data) or "generic"}'
269+
]
266270
attrs = {
267271
'id': cssid(widget, 'display'),
268-
'class_': 'display-{0}'.format(
269-
attr_value('class', widget, data) or 'generic'
270-
)
272+
'class_': ' '.join([_ for _ in cssclasses if _ is not None])
271273
}
272274
attrs.update(as_data_attrs(attr_value('data', widget, data)))
273275
return data.tag('div', content, **attrs)

src/yafowil/lines.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,13 @@ def lines_display_renderer(widget, data):
4848
value = fetch_value(widget, data)
4949
if type(value) in ITER_TYPES and not value:
5050
value = u''
51+
cssclasses = [
52+
attr_value("display_class", widget, data),
53+
f'display-{attr_value("class", widget, data) or "generic"}'
54+
]
5155
attrs = {
5256
'id': cssid(widget, 'display'),
53-
'class_': 'display-{0}'.format(attr_value('class', widget, data))
57+
'class_': ' '.join([_ for _ in cssclasses if _ is not None])
5458
}
5559
attrs.update(as_data_attrs(attr_value('data', widget, data)))
5660
content = u''

src/yafowil/select.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -244,24 +244,31 @@ def select_edit_renderer(widget, data, custom_attrs={}):
244244
def select_display_renderer(widget, data):
245245
value = fetch_value(widget, data)
246246
if type(value) in ITER_TYPES and not value:
247-
value = u''
247+
value = attr_value('empty_display_value', widget, data)
248+
if not value:
249+
value = u''
248250
multivalued = attr_value('multivalued', widget, data)
249251
vocab = dict(attr_value('vocabulary', widget, data, []))
250252
if not multivalued or not value:
251253
value = vocab.get(value, value)
252254
if data.tag.translate:
253255
value = data.tag.translate(value)
254256
return generic_display_renderer(widget, data, value=value)
257+
cssclasses = [
258+
attr_value("display_class", widget, data),
259+
f'display-{attr_value("class", widget, data) or "generic"}'
260+
]
255261
attrs = {
256262
'id': cssid(widget, 'display'),
257-
'class_': 'display-{0}'.format(attr_value('class', widget, data))
263+
'class_': ' '.join([_ for _ in cssclasses if _ is not None])
258264
}
259265
attrs.update(as_data_attrs(attr_value('data', widget, data)))
260266
content = u''
261267
if multivalued and isinstance(value, STR_TYPE):
262268
value = [value]
263269
for key in value:
264-
content += data.tag('li', vocab.get(key, key))
270+
content += data.tag('li', vocab.get(key, key),
271+
**{'class_': attr_value("display_item_class", widget, data)})
265272
return data.tag('ul', content, **attrs)
266273

267274

0 commit comments

Comments
 (0)