summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/view_form.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src/js/view_form.js')
-rw-r--r--addons/web/static/src/js/view_form.js77
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',