diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 23a0f19f121..1a14cf1745d 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1057,7 +1057,12 @@ openerp.web.form.FieldChar = openerp.web.form.Field.extend({ set_value: function(value) { this._super.apply(this, arguments); var show_value = openerp.web.format_value(value, this, ''); - this.$element.find('input').val(show_value); + if (this.view.readonly) { + this.$element.find('div').text(show_value); + } else { + this.$element.find('input').val(show_value); + } + return show_value; }, update_dom: function() { this._super.apply(this, arguments); @@ -1095,8 +1100,12 @@ openerp.web.form.FieldEmail = openerp.web.form.FieldChar.extend({ } }, set_value: function(value) { - this._super.apply(this, arguments); - this.$element.find('a').attr('href', 'mailto:' + this.$element.find('input').val()); + var displayed = this._super.apply(this, arguments); + if (this.view.readonly) { + this.$element.find('a') + .attr('href', 'mailto:' + displayed) + .text(displayed); + } } }); @@ -1112,6 +1121,14 @@ openerp.web.form.FieldUrl = openerp.web.form.FieldChar.extend({ } else { window.open(this.value); } + }, + set_value: function(value) { + var displayed = this._super.apply(this, arguments); + if (this.view.readonly) { + this.$element.find('a') + .attr('href', displayed) + .text(displayed); + } } }); @@ -1130,11 +1147,14 @@ openerp.web.form.FieldDatetime = openerp.web.form.Field.extend({ template: 'FieldDate', init: function(view, node) { this._super(view, node); - this.jqueryui_object = 'datetimepicker'; + if (!this.view.readonly) { + this.jqueryui_object = 'datetimepicker'; + } }, start: function() { var self = this; this._super.apply(this, arguments); + if (this.view.readonly) { return; } this.$element.find('input').change(this.on_ui_change); this.picker({ onSelect: this.on_picker_select, @@ -1164,7 +1184,11 @@ openerp.web.form.FieldDatetime = openerp.web.form.Field.extend({ set_value: function(value) { value = this.parse(value); this._super(value); - this.$element.find('input').val(value ? this.format_client(value) : ''); + if (this.view.readonly) { + this.$element.find('div').text(value ? this.format_client(value) : ''); + } else { + this.$element.find('input').val(value ? this.format_client(value) : ''); + } }, get_value: function() { return this.format(this.value); @@ -1211,7 +1235,9 @@ openerp.web.form.FieldDatetime = openerp.web.form.Field.extend({ openerp.web.form.FieldDate = openerp.web.form.FieldDatetime.extend({ init: function(view, node) { this._super(view, node); - this.jqueryui_object = 'datepicker'; + if (!this.view.readonly) { + this.jqueryui_object = 'datepicker'; + } }, on_picker_select: function(text, instance) { this._super(text, instance); @@ -1228,7 +1254,11 @@ openerp.web.form.FieldText = openerp.web.form.Field.extend({ set_value: function(value) { this._super.apply(this, arguments); var show_value = openerp.web.format_value(value, this, ''); - this.$element.find('textarea').val(show_value); + if (this.view.readonly) { + this.$element.find('div').text(show_value); + } else { + this.$element.find('textarea').val(show_value); + } }, update_dom: function() { this._super.apply(this, arguments); @@ -1265,7 +1295,11 @@ openerp.web.form.FieldBoolean = openerp.web.form.Field.extend({ }, set_value: function(value) { this._super.apply(this, arguments); - this.$element.find('input')[0].checked = value; + if (this.view.readonly) { + this.$element.find('span').text(value ? '✔' : '✘'); + } else { + this.$element.find('input')[0].checked = value; + } }, set_value_from_ui: function() { this.value = this.$element.find('input').is(':checked'); @@ -1347,11 +1381,17 @@ openerp.web.form.FieldSelection = openerp.web.form.Field.extend({ value = value === null ? false : value; value = value instanceof Array ? value[0] : value; this._super(value); - var index = 0; - for (var i = 0, ii = this.values.length; i < ii; i++) { - if (this.values[i][0] === value) index = i; + if (this.view.readonly) { + var option = _(this.values) + .detect(function (record) { return record[0] === value; }); + this.$element.find('div').text(option ? option[1] : this.values[0][1]); + } else { + var index = 0; + for (var i = 0, ii = this.values.length; i < ii; i++) { + if (this.values[i][0] === value) index = i; + } + this.$element.find('select')[0].selectedIndex = index; } - this.$element.find('select')[0].selectedIndex = index; }, set_value_from_ui: function() { this.value = this.values[this.$element.find('select')[0].selectedIndex][0]; @@ -1362,6 +1402,7 @@ openerp.web.form.FieldSelection = openerp.web.form.Field.extend({ this.$element.find('select').attr('disabled', this.readonly); }, validate: function() { + if (this.view.readonly) { return; } var value = this.values[this.$element.find('select')[0].selectedIndex]; this.invalid = !(value && !(this.required && value[0] === false)); }, @@ -1428,6 +1469,7 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({ }, start: function() { this._super(); + if (this.view.readonly) { return; } var self = this; this.$input = this.$element.find("input"); this.$drop_down = this.$element.find(".oe-m2o-drop-down-button"); @@ -1647,6 +1689,10 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({ self.update_dom(); self.on_value_changed(); var real_set_value = function(rval) { + if (self.view.readonly) { + self.$element.find('div').text(rval ? rval[1] : ''); + return; + } self.tmp_value = undefined; self.value = rval; self.original_value = undefined; diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index c88b0116a27..45812e9fd08 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -730,15 +730,23 @@ - - - + + +

+ + +
+ + + + + @@ -764,7 +772,15 @@

+
+ +
- + + # - + @@ -790,9 +807,10 @@ -
- + + # + @@ -801,7 +819,14 @@
+