diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js
index 34bfe15bd4c..fe1ebe1e1a4 100644
--- a/addons/web/static/src/js/view_form.js
+++ b/addons/web/static/src/js/view_form.js
@@ -3052,6 +3052,31 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({
}
});
+openerp.web.form.WidgetHtml = openerp.web.form.Widget.extend({
+ render: function () {
+ var $root = $('
');
+ this.render_children(this, $root);
+ return $root.html();
+ },
+ render_children: function (object, $into) {
+ var self = this,
+ fields = this.view.fields_view.fields;
+ _(object.children).each(function (child) {
+ if (typeof child === 'string') {
+ $into.text(child);
+ } else if (child.tag === 'field') {
+ var type = fields[child.attrs.name] || {};
+ var widget = new (self.view.registry.get_any(
+ [child.attrs.widget, type.type, child.tag])) (self.view, child);
+ $into.append(widget.render());
+ } else {
+ var $child = $(document.createElement(child.tag), child.attrs)
+ .appendTo($into);
+ self.render_children(child, $child);
+ }
+ });
+ }
+});
/**
@@ -3085,7 +3110,8 @@ openerp.web.form.widgets = new openerp.web.Registry({
'progressbar': 'openerp.web.form.FieldProgressBar',
'image': 'openerp.web.form.FieldBinaryImage',
'binary': 'openerp.web.form.FieldBinaryFile',
- 'statusbar': 'openerp.web.form.FieldStatus'
+ 'statusbar': 'openerp.web.form.FieldStatus',
+ 'html': 'openerp.web.form.WidgetHtml'
});