diff options
Diffstat (limited to 'addons/web/static/src/js/view_form.js')
| -rw-r--r-- | addons/web/static/src/js/view_form.js | 77 |
1 files changed, 46 insertions, 31 deletions
diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index a5a56c2d46e..1f1b5b8ef6f 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -15,7 +15,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# /** * @constructs openerp.web.FormView * @extends openerp.web.View - * + * * @param {openerp.web.Session} session the current openerp session * @param {openerp.web.DataSet} dataset the dataset this view will work with * @param {String} view_id the identifier of the OpenERP view object @@ -551,11 +551,13 @@ openerp.web.FormDialog = openerp.web.Dialog.extend({ this.form.on_saved.add_last(this.on_form_dialog_saved); return this; }, - load_id: function(id) { - var self = this; - return this.dataset.read_ids([id], _.keys(this.form.fields_view.fields), function(records) { - self.form.on_record_loaded(records[0]); - }); + select_id: function(id) { + if (this.form.dataset.select_id(id)) { + return this.form.do_show(); + } else { + this.do_warn("Could not find id in dataset"); + return $.Deferred().reject(); + } }, on_form_dialog_saved: function(r) { this.close(); @@ -1007,7 +1009,7 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({ }, on_confirmed: function() { var self = this; - + var context = this.node.attrs.context; if (context && context.__ref) { context = new openerp.web.CompoundContext(context); @@ -1231,6 +1233,19 @@ openerp.web.form.FieldUrl = openerp.web.form.FieldChar.extend({ }); openerp.web.form.FieldFloat = openerp.web.form.FieldChar.extend({ + init: function (view, node) { + this._super(view, node); + if (node.attrs.digits) { + this.parse_digits(node.attrs.digits); + } else { + this.digits = view.fields_view.fields[node.attrs.name].digits; + } + }, + parse_digits: function (digits_attr) { + // could use a Python parser instead. + var match = /^\s*[\(\[](\d+),\s*(\d+)/.exec(digits_attr); + return [parseInt(match[1], 10), parseInt(match[2], 10)]; + }, set_value: function(value) { if (value === false || value === undefined) { // As in GTK client, floats default to 0 @@ -1257,7 +1272,7 @@ openerp.web.DateTimeWidget = openerp.web.Widget.extend({ }); this.$element.find('img.oe_datepicker_trigger').click(function() { if (!self.readonly) { - self.picker('setDate', self.value || new Date()); + self.picker('setDate', self.value ? openerp.web.auto_str_to_date(self.value) : new Date()); self.$element.find('.oe_datepicker').toggle(); } }); @@ -1404,11 +1419,7 @@ openerp.web.form.FieldBoolean = openerp.web.form.Field.extend({ start: function() { var self = this; this._super.apply(this, arguments); - this.$element.find('input').click(function() { - if ($(this).is(':checked') != self.value) { - self.on_ui_change(); - } - }); + this.$element.find('input').click(self.on_ui_change); }, set_value: function(value) { this._super.apply(this, arguments); @@ -1422,9 +1433,6 @@ openerp.web.form.FieldBoolean = openerp.web.form.Field.extend({ this._super.apply(this, arguments); this.$element.find('input').attr('disabled', this.readonly); }, - validate: function() { - this.invalid = this.required && !this.$element.find('input').is(':checked'); - }, focus: function() { this.$element.find('input').focus(); } @@ -1620,6 +1628,11 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({ } else { $("#" + self.cm_id + " .oe_m2o_menu_item_mandatory").addClass("oe-m2o-disabled-cm"); } + if (!self.readonly) { + $("#" + self.cm_id + " .oe_m2o_menu_item_noreadonly").removeClass("oe-m2o-disabled-cm"); + } else { + $("#" + self.cm_id + " .oe_m2o_menu_item_noreadonly").addClass("oe-m2o-disabled-cm"); + } return true; }, menuStyle: {width: "200px"} }); @@ -1639,6 +1652,8 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({ } }); this.$drop_down.click(function() { + if (self.readonly) + return; if (self.$input.autocomplete("widget").is(":visible")) { self.$input.autocomplete("close"); } else { @@ -1845,6 +1860,10 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({ }, focus: function () { this.$input.focus(); + }, + update_dom: function() { + this._super.apply(this, arguments); + this.$input.attr('disabled', this.readonly); } }); @@ -2745,13 +2764,13 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ start: function() { this._super(); this.selected_value = null; - + this.render_list(); }, set_value: function(value) { this._super(value); this.selected_value = value; - + this.render_list(); }, render_list: function() { @@ -2759,7 +2778,7 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ var shown = _.map(((this.node.attrs || {}).statusbar_visible || "").split(","), function(x) { return _.trim(x); }); shown = _.select(shown, function(x) { return x.length > 0; }); - + if (shown.length == 0) { this.to_show = this.field.selection; } else { @@ -2767,10 +2786,10 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ return _.indexOf(shown, x[0]) !== -1 || x[0] === self.selected_value; }); } - + var content = openerp.web.qweb.render("FieldStatus.content", {widget: this, _:_}); this.$element.html(content); - + var colors = JSON.parse((this.node.attrs || {}).statusbar_colors || "{}"); var color = colors[this.selected_value]; if (color) { @@ -2805,9 +2824,6 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ } }); -openerp.web.form.WidgetNotebookReadonly = openerp.web.form.WidgetNotebook.extend({ - template: 'WidgetNotebook.readonly' -}); openerp.web.form.FieldReadonly = openerp.web.form.Field.extend({ }); @@ -2835,15 +2851,15 @@ openerp.web.form.FieldEmailReadonly = openerp.web.form.FieldURIReadonly.extend({ }); openerp.web.form.FieldUrlReadonly = openerp.web.form.FieldURIReadonly.extend({ set_value: function (value) { - var s = /(\w+):(\.+)/.match(value); - if (!(s[0] === 'http' || s[0] === 'https')) { return; } - this.scheme = s[0]; - this._super(s[1]); + var s = /(\w+):(.+)/.exec(value); + if (!s || !(s[1] === 'http' || s[1] === 'https')) { return; } + this.scheme = s[1]; + this._super(s[2]); } }); openerp.web.form.FieldBooleanReadonly = openerp.web.form.FieldCharReadonly.extend({ set_value: function (value) { - this._super(value ? '\u2714' : '\u2718'); + this._super(value ? '\u2611' : '\u2610'); } }); openerp.web.form.FieldSelectionReadonly = openerp.web.form.FieldReadonly.extend({ @@ -2874,7 +2890,7 @@ openerp.web.form.FieldMany2OneReadonly = openerp.web.form.FieldCharReadonly.exte value = value || null; this.invalid = false; var self = this; - this.tmp_value = value; + this.value = value; self.update_dom(); self.on_value_changed(); var real_set_value = function(rval) { @@ -2926,7 +2942,6 @@ openerp.web.form.widgets = new openerp.web.Registry({ 'statusbar': 'openerp.web.form.FieldStatus' }); openerp.web.form.readonly = openerp.web.form.widgets.clone({ - 'notebook': 'openerp.web.form.WidgetNotebookReadonly', 'char': 'openerp.web.form.FieldCharReadonly', 'email': 'openerp.web.form.FieldEmailReadonly', 'url': 'openerp.web.form.FieldUrlReadonly', |
