[REM] automagic tag creation in t-field rendering
bzr revid: xmo@openerp.com-20130925121028-s1i1628vt7rtopzn
This commit is contained in:
@@ -21,6 +21,7 @@ import test_osv
|
||||
import test_translate
|
||||
import test_uninstall
|
||||
import test_view_validation
|
||||
import test_qweb
|
||||
# This need a change in `oe run-tests` to only run fast_suite + checks by default.
|
||||
# import test_xmlrpc
|
||||
|
||||
@@ -41,6 +42,7 @@ checks = [
|
||||
test_misc,
|
||||
test_osv,
|
||||
test_translate,
|
||||
test_qweb,
|
||||
]
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -103,7 +103,6 @@ class TestACL(common.TransactionCase):
|
||||
finally:
|
||||
self.res_partner._columns['email'].groups = False
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest2.main()
|
||||
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from xml.dom import minidom as dom
|
||||
|
||||
import common
|
||||
|
||||
from ..tools import qweb
|
||||
|
||||
impl = dom.getDOMImplementation()
|
||||
document = impl.createDocument(None, None, None)
|
||||
|
||||
class TestQWebTField(common.TransactionCase):
|
||||
def setUp(self):
|
||||
super(TestQWebTField, self).setUp()
|
||||
self.engine = qweb.QWebXml()
|
||||
|
||||
def test_trivial(self):
|
||||
field = document.createElement('span')
|
||||
field.setAttribute('t-field', u'company.name')
|
||||
|
||||
Companies = self.registry('res.company')
|
||||
company_id = Companies.create(self.cr, self.uid, {
|
||||
'name': "My Test Company"
|
||||
})
|
||||
root_company = Companies.browse(self.cr, self.uid, company_id)
|
||||
|
||||
result = self.engine.render_node(field, {'company': root_company})
|
||||
|
||||
self.assertEqual(
|
||||
result,
|
||||
'<span data-oe-model="res.company" data-oe-id="%d" '
|
||||
'data-oe-field="name" data-oe-type="char" '
|
||||
'data-oe-expression="company.name">%s</span>' % (
|
||||
company_id,
|
||||
"My Test Company",))
|
||||
|
||||
def test_reject_crummy_tags(self):
|
||||
field = document.createElement('td')
|
||||
field.setAttribute('t-field', u'company.name')
|
||||
|
||||
with self.assertRaisesRegexp(
|
||||
AssertionError,
|
||||
r'^RTE widgets do not work correctly'):
|
||||
self.engine.render_node(field, {'company': None})
|
||||
|
||||
def test_reject_t_tag(self):
|
||||
field = document.createElement('t')
|
||||
field.setAttribute('t-field', u'company.name')
|
||||
|
||||
with self.assertRaisesRegexp(
|
||||
AssertionError,
|
||||
r'^t-field can not be used on a t element'):
|
||||
self.engine.render_node(field, {'company': None})
|
||||
+5
-23
@@ -36,7 +36,7 @@ class QWebContext(dict):
|
||||
self.undefined_handler = undefined_handler
|
||||
dic = BUILTINS.copy()
|
||||
dic.update(data)
|
||||
dict.__init__(self, dic)
|
||||
super(QWebContext, self).__init__(dic)
|
||||
self['defined'] = lambda key: key in self
|
||||
|
||||
def __getitem__(self, key):
|
||||
@@ -330,14 +330,16 @@ class QWebXml(object):
|
||||
node_name = e.nodeName
|
||||
assert node_name not in ("table", "tbody", "thead", "tfoot", "tr", "td"),\
|
||||
"RTE widgets do not work correctly on %r elements" % node_name
|
||||
assert node_name != 't',\
|
||||
"t-field can not be used on a t element, provide an actual HTML node"
|
||||
|
||||
record, field = t_att["field"].rsplit('.', 1)
|
||||
record = self.eval_object(record, v)
|
||||
|
||||
inner = None
|
||||
column = record._model._all_columns[field].column
|
||||
field_type = record._model._all_columns[field].column._type
|
||||
try:
|
||||
if column._type == 'many2one':
|
||||
if field_type == 'many2one':
|
||||
field_data = record.read([field])[0].get(field)
|
||||
inner = field_data and field_data[1]
|
||||
else:
|
||||
@@ -346,9 +348,6 @@ class QWebXml(object):
|
||||
if isinstance(inner, unicode):
|
||||
inner = inner.encode("utf8")
|
||||
|
||||
if node_name == 't':
|
||||
e.nodeName = DEFAULT_TAG_BY_TYPE[column._type]
|
||||
|
||||
g_att += ''.join(
|
||||
' %s="%s"' % (name, cgi.escape(str(value), True))
|
||||
for name, value in [
|
||||
@@ -365,21 +364,4 @@ class QWebXml(object):
|
||||
|
||||
return self.render_element(e, t_att, g_att, v, str(inner or ""))
|
||||
|
||||
# If a t-field is set on a <t> element, by default only its text will be
|
||||
# rendered losing the information that it's a tag and completely breaking
|
||||
# edition => replace <t> by some default tag depending on field type
|
||||
DEFAULT_TAG_BY_TYPE = {
|
||||
'integer': 'span',
|
||||
'float': 'span',
|
||||
'char': 'span',
|
||||
'date': 'span',
|
||||
'datetime': 'span',
|
||||
'time': 'span',
|
||||
'many2one': 'span',
|
||||
|
||||
'text': 'p',
|
||||
|
||||
'html': 'div',
|
||||
}
|
||||
|
||||
# leave this, al.
|
||||
|
||||
Reference in New Issue
Block a user