template: new "xmlui_class" filter compute class names from name/values of requested fields.

This commit is contained in:
Goffi 2017-10-16 07:44:08 +02:00
commit 07d5a18b79

View file

@ -196,6 +196,7 @@ class Renderer(object):
self.env.filters['next_gidx'] = self._next_gidx
self.env.filters['cur_gidx'] = self._cur_gidx
self.env.filters['date_days'] = self._date_days
self.env.filters['xmlui_class'] = self._xmlui_class
def installTranslations(self):
i18n_dir = os.path.join(self.base_dir, 'i18n')
@ -328,6 +329,33 @@ class Renderer(object):
def _date_days(self, timestamp):
return int(time.time() - int(timestamp))/(3600*24)
def attr_escape(self, text):
"""escape a text to a value usable as an attribute
remove spaces, and put in lower case
"""
return text.strip().lower().replace(' ', '_')
def _xmlui_class(self, xmlui_item, fields):
"""return classes computed from XMLUI fields name
will return a string with a series of escaped {name}_{value} separated by spaces.
@param xmlui_item(xmlui.XMLUIPanel): XMLUI containing the widgets to use
@param fields(iterable(unicode)): names of the widgets to use
@return (unicode, None): computer string to use as class attribute value
None if no field was specified
"""
classes = []
for name in fields:
escaped_name = self.attr_escape(name)
try:
for value in xmlui_item.widgets[name].values:
classes.append(escaped_name + '_' + self.attr_escape(value))
except KeyError:
log.debug(_(u"ignoring field \"{name}\": it doesn't exists").format(name=name))
continue
return u' '.join(classes) or None
def render(self, template, theme=None, locale=DEFAULT_LOCALE, root_path=u'', css_files=None, css_inline=False, **kwargs):
"""render a template