[ADD] readonly branch to a bunch of form widgets

bzr revid: xmo@openerp.com-20110919122416-h773tyz1kogazyy0
This commit is contained in:
Xavier Morel 2011-09-19 14:24:16 +02:00
parent ea6299dae6
commit 566f9a43e8
2 changed files with 122 additions and 28 deletions

View File

@ -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;

View File

@ -730,15 +730,23 @@
</table>
</t>
<t t-name="WidgetNotebook">
<ul>
<li t-foreach="widget.pages" t-as="page">
<a href="#">
<t t-esc="page.string"/>
</a>
</li>
</ul>
<t t-foreach="widget.pages" t-as="page">
<t t-raw="page.render()"/>
<t t-if="widget.view.readonly">
<t t-foreach="widget.pages" t-as="page">
<h3><t t-esc="page.string"/></h3>
<t t-raw="page.render()"/>
</t>
</t>
<t t-if="!widget.view.readonly">
<ul>
<li t-foreach="widget.pages" t-as="page">
<a href="#">
<t t-esc="page.string"/>
</a>
</li>
</ul>
<t t-foreach="widget.pages" t-as="page">
<t t-raw="page.render()"/>
</t>
</t>
</t>
<t t-name="WidgetNotebookPage">
@ -764,7 +772,15 @@
<p class="oe_form_paragraph"><t t-esc="widget.string"/></p>
</t>
<t t-name="FieldChar">
<div
t-if="widget.view.readonly"
t-att-id="widget.element_id"
t-attf-class="field_#{widget.type} #{widget.element_class}"
t-attf-style="width: #{widget.field.translate ? '99' : '100'}%">
</div>
<input type="text" size="1"
t-if="!widget.view.readonly"
t-att-name="widget.name"
t-att-id="widget.element_id"
t-attf-class="field_#{widget.type} #{widget.element_class}"
@ -776,9 +792,10 @@
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td width="100%">
<t t-call="FieldChar"/>
<t t-call="FieldChar" t-if="!widget.view.readonly"/>
<a href="mailto:#" t-if="widget.view.readonly">#</a>
</td>
<td width="16">
<td width="16" t-if="!widget.view.readonly">
<button type="button" class="button" title="Send an e-mail with your default e-mail client">
<img src="/web/static/src/img/icons/terp-mail-message-new.png"/>
</button>
@ -790,9 +807,10 @@
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td width="100%">
<t t-call="FieldChar"/>
<t t-call="FieldChar" t-if="!widget.view.readonly"/>
<a href="mailto:#" t-if="widget.view.readonly">#</a>
</td>
<td width="16">
<td width="16" t-if="!widget.view.readonly">
<button type="button" class="button" title="Open this resource">
<img src="/web/static/src/img/icons/gtk-ok.png"/>
</button>
@ -801,7 +819,14 @@
</table>
</t>
<t t-name="FieldText">
<div
t-if="widget.view.readonly"
t-att-name="widget.name"
t-att-id="widget.element_id"
t-attf-class="field_#{widget.type} #{widget.element_class}"
t-attf-style="width: #{widget.field.translate ? '99' : '100'}%"></div>
<textarea rows="6"
t-if="!widget.view.readonly"
t-att-name="widget.name"
t-att-id="widget.element_id"
t-attf-class="field_#{widget.type} #{widget.element_class}"
@ -811,15 +836,26 @@
</t>
<t t-name="FieldDate">
<t t-call="FieldChar"/>
<img class="oe_input_icon oe_datepicker_trigger" src="/web/static/src/img/ui/field_calendar.png"
<img t-if="!widget.view.readonly"
class="oe_input_icon oe_datepicker_trigger" src="/web/static/src/img/ui/field_calendar.png"
title="Select date" width="16" height="16" border="0"/>
<div class="oe_datepicker ui-widget-content ui-corner-all" style="display: none; position: absolute; z-index: 1;">
<div t-if="!widget.view.readonly"
class="oe_datepicker ui-widget-content ui-corner-all" style="display: none; position: absolute; z-index: 1;">
<div class="oe_datepicker_container"/>
<button type="button" class="oe_datepicker_close ui-state-default ui-priority-primary ui-corner-all" style="float: right;">Done</button>
</div>
</t>
<t t-name="FieldSelection">
<div
t-if="widget.view.readonly"
t-att-name="widget.name"
t-att-id="widget.element_id + '_field'"
t-attf-class="field_#{widget.type} #{widget.element_class}"
style="width: 100%">
</div>
<select
t-if="!widget.view.readonly"
t-att-name="widget.name"
t-att-id="widget.element_id + '_field'"
t-attf-class="field_#{widget.type} #{widget.element_class}"
@ -830,7 +866,11 @@
</select>
</t>
<t t-name="FieldMany2One">
<div t-att-class="widget.element_class" class="oe-m2o">
<div t-if="widget.view.readonly" class="oe-m2o">
</div>
<div t-if="!widget.view.readonly"
t-att-class="widget.element_class" class="oe-m2o">
<input type="text" size="1" style="width: 100%;"/>
<span class="oe-m2o-drop-down-button">
<img src="/web/static/src/img/down-arrow.png" /></span>
@ -872,7 +912,15 @@
</table>
</t>
<t t-name="FieldBoolean">
<span
t-if="widget.view.readonly"
t-att-name="widget.name"
t-att-id="widget.element_id + '_field'"
t-attf-class="field_#{widget.type} #{widget.element_class}">
</span>
<input type="checkbox"
t-if="!widget.view.readonly"
t-att-name="widget.name"
t-att-id="widget.element_id + '_field'"
t-attf-class="field_#{widget.type} #{widget.element_class}"/>