[IMP] ir_qweb: added t-esc-options to allow customization of a t-esc; added an ir.qweb.widget model to format the t-esc value depending on the 'widget' key of t-esc-options; added ir.qweb.widget.monetary
bzr revid: sle@openerp.com-20140407131145-a6357u6tdbu6v2ix
This commit is contained in:
parent
3193b972b6
commit
9e1f395c23
|
@ -332,7 +332,9 @@ class QWeb(orm.AbstractModel):
|
|||
return self.render_element(element, template_attributes, generated_attributes, qwebcontext, inner)
|
||||
|
||||
def render_tag_esc(self, element, template_attributes, generated_attributes, qwebcontext):
|
||||
inner = werkzeug.utils.escape(self.eval_str(template_attributes["esc"], qwebcontext))
|
||||
options = json.loads(template_attributes.get('esc-options') or '{}')
|
||||
widget = self.get_widget_for(options.get('widget', ''))
|
||||
inner = widget.format(template_attributes['esc'], options, qwebcontext)
|
||||
return self.render_element(element, template_attributes, generated_attributes, qwebcontext, inner)
|
||||
|
||||
def render_tag_foreach(self, element, template_attributes, generated_attributes, qwebcontext):
|
||||
|
@ -419,6 +421,9 @@ class QWeb(orm.AbstractModel):
|
|||
return self.pool.get('ir.qweb.field.' + field_type,
|
||||
self.pool['ir.qweb.field'])
|
||||
|
||||
def get_widget_for(self, widget):
|
||||
return self.pool.get('ir.qweb.widget.' + widget, self.pool['ir.qweb.widget'])
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# QWeb Fields converters
|
||||
#--------------------------------------------------------------------
|
||||
|
@ -840,6 +845,38 @@ class Contact(orm.AbstractModel):
|
|||
|
||||
return HTMLSafe(html)
|
||||
|
||||
class QwebWidget(osv.AbstractModel):
|
||||
_name = 'ir.qweb.widget'
|
||||
|
||||
def _format(self, inner, options, qwebcontext):
|
||||
return self.pool['ir.qweb'].eval_str(inner, qwebcontext)
|
||||
|
||||
def format(self, inner, options, qwebcontext):
|
||||
return werkzeug.utils.escape(self._format(inner, options, qwebcontext))
|
||||
|
||||
class QwebWidgetMonetary(osv.AbstractModel):
|
||||
_name = 'ir.qweb.widget.monetary'
|
||||
_inherit = 'ir.qweb.widget'
|
||||
|
||||
def _format(self, inner, options, qwebcontext):
|
||||
inner = self.pool['ir.qweb'].eval(inner, qwebcontext)
|
||||
display = self.pool['ir.qweb'].eval_object(options['display_currency'], qwebcontext)
|
||||
precision = int(round(math.log10(display.rounding)))
|
||||
fmt = "%.{0}f".format(-precision if precision < 0 else 0)
|
||||
lang_code = qwebcontext.context.get('lang') or 'en_US'
|
||||
formatted_amount = self.pool['res.lang'].format(
|
||||
qwebcontext.cr, qwebcontext.uid, [lang_code], fmt, inner, grouping=True, monetary=True
|
||||
)
|
||||
pre = post = u''
|
||||
if display.position == 'before':
|
||||
pre = u'{symbol} '
|
||||
else:
|
||||
post = u' {symbol}'
|
||||
|
||||
return u'{pre}{0}{post}'.format(
|
||||
formatted_amount, pre=pre, post=post
|
||||
).format(symbol=display.symbol,)
|
||||
|
||||
class HTMLSafe(object):
|
||||
""" HTMLSafe string wrapper, Werkzeug's escape() has special handling for
|
||||
objects with a ``__html__`` methods but AFAIK does not provide any such
|
||||
|
|
Loading…
Reference in New Issue