diff options
| author | Xavier Morel <xmo@openerp.com> | 2011-08-22 14:32:58 +0200 |
|---|---|---|
| committer | Xavier Morel <xmo@openerp.com> | 2011-08-22 14:32:58 +0200 |
| commit | 2fad2d1f80a2162d7523d8ef5d2eee5c4c76ff10 (patch) | |
| tree | ae3afa6d1d63d4e83aee952307abfab918981876 /addons/base/static/src/js/form.js | |
| parent | c76bb492f20f00de2a05b10f7b1c30b1dca57c49 (diff) | |
| parent | eebd0ccfd246c4e9a88574100844e606c18b0683 (diff) | |
[MERGE] from trunk
bzr revid: xmo@openerp.com-20110822123258-thxewwdvbysap4jt
Diffstat (limited to 'addons/base/static/src/js/form.js')
| -rw-r--r-- | addons/base/static/src/js/form.js | 99 |
1 files changed, 82 insertions, 17 deletions
diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 6eeff025e1f..e7bc2d51eba 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -1,5 +1,5 @@ openerp.base.form = function (openerp) { - + var _t = openerp.base._t; openerp.base.views.add('form', 'openerp.base.FormView'); @@ -346,7 +346,10 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi }); } } else { - return false; + setTimeout(function() { + self.on_saved({ result: true }, success); + }); + return true; } }, do_save_edit: function() { @@ -458,9 +461,7 @@ openerp.base.form.SidebarAttachments = openerp.base.Widget.extend({ ['res_model', '=', this.view.dataset.model], ['res_id', '=', this.view.datarecord.id], ['type', 'in', ['binary', 'url']] - ])).read_slice( - {fields: ['name', 'url', 'type']}, - this.on_attachments_loaded); + ])).read_slice(['name', 'url', 'type'], this.on_attachments_loaded); } }, on_attachments_loaded: function(attachments) { @@ -811,6 +812,7 @@ openerp.base.form.WidgetLabel = openerp.base.form.Widget.extend({ this.$element.find("label").dblclick(function() { var widget = self['for'] || self; self.log(widget.element_id , widget); + window.w = widget; }); } }); @@ -841,9 +843,12 @@ openerp.base.form.Field = openerp.base.form.Widget.extend({ this.value = value; this.invalid = false; this.update_dom(); + this.on_value_changed(); }, set_value_from_ui: function() { - this.value = undefined; + this.on_value_changed(); + }, + on_value_changed: function() { }, get_value: function() { return this.value; @@ -942,6 +947,7 @@ openerp.base.form.FieldChar = openerp.base.form.Field.extend({ }, set_value_from_ui: function() { this.value = this.$element.find('input').val(); + this._super(); }, validate: function() { this.invalid = false; @@ -1016,6 +1022,7 @@ openerp.base.form.FieldFloat = openerp.base.form.FieldChar.extend({ }, set_value_from_ui: function() { this.value = Number(this.$element.find('input').val().replace(/,/g, '.')); + this._super(); } }); @@ -1036,6 +1043,7 @@ openerp.base.form.FieldInteger = openerp.base.form.FieldFloat.extend({ }, set_value_from_ui: function() { this.value = Number(this.$element.find('input').val()); + this._super(); } }); @@ -1073,6 +1081,7 @@ openerp.base.form.FieldDatetime = openerp.base.form.Field.extend({ if (this.value) { this.value = this.format(this.value); } + this._super(); }, update_dom: function() { this._super.apply(this, arguments); @@ -1092,8 +1101,8 @@ openerp.base.form.FieldDatetime = openerp.base.form.Field.extend({ focus: function() { this.$element.find('input').focus(); }, - parse: openerp.base.parse_datetime, - format: openerp.base.format_datetime + parse: openerp.base.str_to_datetime, + format: openerp.base.datetime_to_str }); openerp.base.form.FieldDate = openerp.base.form.FieldDatetime.extend({ @@ -1102,8 +1111,8 @@ openerp.base.form.FieldDate = openerp.base.form.FieldDatetime.extend({ this.jqueryui_object = 'datepicker'; this.validation_regex = /^\d+-\d+-\d+$/; }, - parse: openerp.base.parse_date, - format: openerp.base.format_date + parse: openerp.base.str_to_date, + format: openerp.base.date_to_str }); openerp.base.form.FieldFloatTime = openerp.base.form.FieldChar.extend({ @@ -1124,6 +1133,7 @@ openerp.base.form.FieldFloatTime = openerp.base.form.FieldChar.extend({ set_value_from_ui: function() { var time = this.$element.find('input').val().split(':'); this.set_value(parseInt(time[0], 10) + parseInt(time[1], 10) / 60); + this._super(); } }); @@ -1148,6 +1158,7 @@ openerp.base.form.FieldText = openerp.base.form.Field.extend({ }, set_value_from_ui: function() { this.value = this.$element.find('textarea').val(); + this._super(); }, validate: function() { this.invalid = false; @@ -1183,6 +1194,7 @@ openerp.base.form.FieldBoolean = openerp.base.form.Field.extend({ }, set_value_from_ui: function() { this.value = this.$element.find('input').is(':checked'); + this._super(); }, update_dom: function() { this._super.apply(this, arguments); @@ -1265,6 +1277,7 @@ openerp.base.form.FieldSelection = openerp.base.form.Field.extend({ var ikey = this.$element.find('select').val(); var option = _.detect(this.field_index, function(x) {return x.ikey === ikey;}); this.value = option === undefined ? false : option.ekey; + this._super(); }, update_dom: function() { this._super.apply(this, arguments); @@ -1529,7 +1542,6 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ this.on_ui_change(); } }, - set_value_from_ui: function() {}, set_value: function(value) { value = value || null; var self = this; @@ -1697,7 +1709,6 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({ }); } }, - set_value_from_ui: function() {}, set_value: function(value) { value = value || []; var self = this; @@ -1918,7 +1929,6 @@ openerp.base.form.FieldMany2Many = openerp.base.form.Field.extend({ get_value: function() { return [commands.replace_with(this.dataset.ids)]; }, - set_value_from_ui: function() {}, validate: function() { this.invalid = false; // TODO niv @@ -2192,10 +2202,67 @@ openerp.base.form.FormOpenPopup = openerp.base.OldWidget.extend({ } }); -openerp.base.form.FieldReference = openerp.base.form.FieldChar.extend({ +openerp.base.form.FieldReference = openerp.base.form.Field.extend({ init: function(view, node) { this._super(view, node); - //this.template = "FieldReference"; + this.template = "FieldReference"; + this.fields_view = { + fields: { + selection: { + selection: view.fields_view.fields[this.name].selection + }, + m2o: { + relation: null + } + } + } + this.get_fields_values = view.get_fields_values; + this.do_onchange = this.on_form_changed = this.on_nop; + this.widgets = {}; + this.fields = {}; + this.selection = new openerp.base.form.FieldSelection(this, { attrs: { + name: 'selection', + widget: 'selection' + }}); + this.selection.on_value_changed.add_last(this.on_selection_changed); + this.m2o = new openerp.base.form.FieldMany2One(this, { attrs: { + name: 'm2o', + widget: 'many2one' + }}); + }, + on_nop: function() { + }, + on_selection_changed: function() { + this.m2o.field.relation = this.selection.get_value(); + this.m2o.set_value(null); + }, + start: function() { + this._super(); + this.selection.start(); + this.m2o.start(); + }, + is_valid: function() { + return this.required === false || typeof(this.get_value()) === 'string'; + }, + is_dirty: function() { + return this.selection.is_dirty() || this.m2o.is_dirty(); + }, + set_value: function(value) { + this._super(value); + if (typeof(value) === 'string') { + var vals = value.split(','); + this.selection.set_value(vals[0]); + this.m2o.set_value(parseInt(vals[1], 10)); + } + }, + get_value: function() { + var model = this.selection.get_value(), + id = this.m2o.get_value(); + if (typeof(model) === 'string' && typeof(id) === 'number') { + return model + ',' + id; + } else { + return false; + } } }); @@ -2211,8 +2278,6 @@ openerp.base.form.FieldBinary = openerp.base.form.Field.extend({ this.$element.find('button.oe-binary-file-save').click(this.on_save_as); this.$element.find('.oe-binary-file-clear').click(this.on_clear); }, - set_value_from_ui: function() { - }, update_dom: function() { this._super.apply(this, arguments); this.$element.find('.oe-binary').toggle(!this.readonly); |
