diff options
| author | niv-openerp <nicolas.vanhoren@openerp.com> | 2012-03-16 13:23:31 +0100 |
|---|---|---|
| committer | niv-openerp <nicolas.vanhoren@openerp.com> | 2012-03-16 13:23:31 +0100 |
| commit | 5f5abc44617537aee9e4071d005e6f08d4f2a5ea (patch) | |
| tree | e6f99d53d67b5828f8edbc8fa65787779333a16b | |
| parent | ff22ac43990efa79ad7e4b310af21b2bb2347b75 (diff) | |
[imp] made selection readonly-able
bzr revid: nicolas.vanhoren@openerp.com-20120316122331-ewfto4tzutt87t2h
| -rw-r--r-- | addons/web/static/src/js/view_form.js | 36 | ||||
| -rw-r--r-- | addons/web/static/src/js/view_page.js | 24 | ||||
| -rw-r--r-- | addons/web/static/src/xml/base.xml | 28 |
3 files changed, 45 insertions, 43 deletions
diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 76303a69492..c14a59ab616 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1808,6 +1808,15 @@ openerp.web.form.FieldSelection = openerp.web.form.AbstractField.extend({ this.values.unshift([false, '']); }, start: function() { + this._super.apply(this, arguments); + this.bind_events(); + this.on("change:effective_readonly", this, function() { + this.render_element(); + this.bind_events(); + this.render_value(); + }); + }, + bind_events: function() { // Flag indicating whether we're in an event chain containing a change // event on the select, in order to know what to do on keyup[RETURN]: // * If the user presses [RETURN] as part of changing the value of a @@ -1820,7 +1829,6 @@ openerp.web.form.FieldSelection = openerp.web.form.AbstractField.extend({ // changing the selected value), takes the action as validating the // row var ischanging = false; - this._super.apply(this, arguments); this.$element.find('select') .change(this.on_ui_change) .change(function () { ischanging = true; }) @@ -1835,21 +1843,31 @@ openerp.web.form.FieldSelection = openerp.web.form.AbstractField.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; + this.render_value(); + }, + render_value: function() { + if (!this.get("effective_readonly")) { + var index = 0; + for (var i = 0, ii = this.values.length; i < ii; i++) { + if (this.values[i][0] === this.value) index = i; + } + this.$element.find('select')[0].selectedIndex = index; + } else { + var self = this; + var option = _(this.values) + .detect(function (record) { return record[0] === self.value; }); + this.$element.text(option ? option[1] : this.values[0][1]); } - this.$element.find('select')[0].selectedIndex = index; }, set_value_from_ui: function() { this.value = this.values[this.$element.find('select')[0].selectedIndex][0]; this._super(); }, - update_dom: function() { - this._super.apply(this, arguments); - this.$element.find('select').prop('disabled', this.readonly); - }, validate: function() { + if (this.get("effective_readonly")) { + this.invalid = false; + return; + } var value = this.values[this.$element.find('select')[0].selectedIndex]; this.invalid = !(value && !(this.required && value[0] === false)); }, diff --git a/addons/web/static/src/js/view_page.js b/addons/web/static/src/js/view_page.js index 4665c15ca05..4a7264ab1c8 100644 --- a/addons/web/static/src/js/view_page.js +++ b/addons/web/static/src/js/view_page.js @@ -68,29 +68,6 @@ openerp.web.page = function (openerp) { /** @namespace */ openerp.web.page = {}; - openerp.web.page.FieldSelectionReadonly = openerp.web.form.AbstractField.extend({ - form_template: 'FieldChar.readonly', - init: function(view, node) { - // lifted straight from r/w version - var self = this; - this._super(view, node); - this.values = _.clone(this.field.selection); - _.each(this.values, function(v, i) { - if (v[0] === false && v[1] === '') { - self.values.splice(i, 1); - } - }); - this.values.unshift([false, '']); - }, - set_value: function (value) { - value = value === null ? false : value; - value = value instanceof Array ? value[0] : value; - var option = _(this.values) - .detect(function (record) { return record[0] === value; }); - this._super(value); - this.$element.find('div').text(option ? option[1] : this.values[0][1]); - } - }); openerp.web.page.FieldReferenceReadonly = openerp.web.form.FieldMany2One.extend({ set_value: function (value) { if (!value) { @@ -144,7 +121,6 @@ openerp.web.page = function (openerp) { } }); openerp.web.page.readonly = openerp.web.form.widgets.extend({ - 'selection' : 'openerp.web.page.FieldSelectionReadonly', 'reference': 'openerp.web.page.FieldReferenceReadonly', 'binary': 'openerp.web.page.FieldBinaryFileReadonly', 'image': 'openerp.web.page.FieldBinaryImageReaonly', diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index c63394ee0dd..31dc699e4e6 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -1022,16 +1022,24 @@ </div> </t> <t t-name="FieldSelection"> - <div t-attf-class="oe_form_field_#{type}"> - <select - t-att-name="widget.name" - t-att-id="widget.node.attrs.id" - style="width: 100%"> - <t t-foreach="widget.values" t-as="option"> - <option><t t-esc="option[1]"/></option> - </t> - </select> - </div> + <t t-if="!widget.get('effective_readonly')"> + <div t-attf-class="oe_form_field_#{type}"> + <select + t-att-name="widget.name" + t-att-id="widget.node.attrs.id" + style="width: 100%"> + <t t-foreach="widget.values" t-as="option"> + <option><t t-esc="option[1]"/></option> + </t> + </select> + </div> + </t> + <t t-if="widget.get('effective_readonly')"> + <div + t-att-id="widget.element_id" + t-attf-class="field_#{widget.type} #{_(['integer', 'float', 'float_time']).contains(widget.type) ? 'oe-number' : ''}"> + </div> + </t> </t> <t t-name="FieldMany2One"> <table t-attf-class="oe_form_field_#{type}" cellpadding="0" cellspacing="0" border="0" width="100%"> |
