summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2015-01-06 11:49:04 +0100
committerChristophe Simonis <chs@odoo.com>2015-01-06 11:49:04 +0100
commitfab4d6d442ebbf081ead7e747f04b61e01ae9db2 (patch)
tree3dd9aad0f429f4229e500db503bbf8b7155f9c38 /addons/web/static/src/js
parent7fea986fd9f6f3ce1cc6c015a2523fdd23cf814d (diff)
parentea54d4af9f75e518c5871213a668a9f516e56830 (diff)
[MERGE] forward port of branch 8.0 up to ea54d4a
Diffstat (limited to 'addons/web/static/src/js')
-rw-r--r--addons/web/static/src/js/tour.js14
-rw-r--r--addons/web/static/src/js/view_form.js100
-rw-r--r--addons/web/static/src/js/view_list.js12
3 files changed, 77 insertions, 49 deletions
diff --git a/addons/web/static/src/js/tour.js b/addons/web/static/src/js/tour.js
index 08738ac019e..c42dc439c82 100644
--- a/addons/web/static/src/js/tour.js
+++ b/addons/web/static/src/js/tour.js
@@ -256,12 +256,20 @@ var Tour = {
},
repositionPopover: function() {
var popover = Tour.$element.data("bs.popover");
- var $tip = Tour.$element.data("bs.popover").tip();
+ var $tip = popover.tip();
if (popover.options.orphan) {
return $tip.css("top", $(window).outerHeight() / 2 - $tip.outerHeight() / 2);
}
+ if (Tour.$element.parents("div").filter(function(){ return getComputedStyle(this).position === 'fixed'; }).length) {
+ var pos = popover.getPosition();
+ var top = pos.top;
+ if (popover.options.placement === "top") top -= $tip.height();
+ if (popover.options.placement === "bottom") top += pos.height;
+ $tip.css({'top': top+'px'});
+ }
+
var offsetBottom, offsetHeight, offsetRight, offsetWidth, originalLeft, originalTop, tipOffset;
offsetWidth = $tip[0].offsetWidth;
offsetHeight = $tip[0].offsetHeight;
@@ -285,10 +293,10 @@ var Tour = {
$tip.offset(tipOffset);
if (popover.options.placement === "bottom" || popover.options.placement === "top") {
var left = Tour.$element.offset().left + Tour.$element.outerWidth()/2 - tipOffset.left;
- $tip.find(".arrow").css("left", left ? left + "px" : "");
+ popover.arrow().css("left", left ? left + "px" : "");
} else if (popover.options.placement !== "auto") {
var top = Tour.$element.offset().top + Tour.$element.outerHeight()/2 - tipOffset.top;
- $tip.find(".arrow").css("top", top ? top + "px" : "");
+ popover.arrow().css("top", top ? top + "px" : "");
}
},
_load_template: false,
diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js
index 933b662d3ff..b004fef331f 100644
--- a/addons/web/static/src/js/view_form.js
+++ b/addons/web/static/src/js/view_form.js
@@ -510,38 +510,47 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
}
this.onchanges_mutex.exec(function(){
return def.then(function(response) {
- if (widget && widget.field['change_default']) {
- var fieldname = widget.name;
- var value_;
- if (response.value && (fieldname in response.value)) {
- // Use value from onchange if onchange executed
- value_ = response.value[fieldname];
- } else {
- // otherwise get form value for field
- value_ = self.fields[fieldname].get_value();
- }
- var condition = fieldname + '=' + value_;
-
- if (value_) {
- return self.alive(new instance.web.Model('ir.values').call(
- 'get_defaults', [self.model, condition]
- )).then(function (results) {
- if (!results.length) {
+ var fields = {};
+ if (widget){
+ fields[widget.name] = widget.field;
+ }
+ else{
+ fields = self.fields_view.fields;
+ }
+ var defs = [];
+ _.each(fields, function(field, fieldname){
+ if (field && field.change_default) {
+ var value_;
+ if (response.value && (fieldname in response.value)) {
+ // Use value from onchange if onchange executed
+ value_ = response.value[fieldname];
+ } else {
+ // otherwise get form value for field
+ value_ = self.fields[fieldname].get_value();
+ }
+ var condition = fieldname + '=' + value_;
+
+ if (value_) {
+ defs.push(self.alive(new instance.web.Model('ir.values').call(
+ 'get_defaults', [self.model, condition]
+ )).then(function (results) {
+ if (!results.length) {
+ return response;
+ }
+ if (!response.value) {
+ response.value = {};
+ }
+ for(var i=0; i<results.length; ++i) {
+ // [whatever, key, value]
+ var triplet = results[i];
+ response.value[triplet[1]] = triplet[2];
+ }
return response;
- }
- if (!response.value) {
- response.value = {};
- }
- for(var i=0; i<results.length; ++i) {
- // [whatever, key, value]
- var triplet = results[i];
- response.value[triplet[1]] = triplet[2];
- }
- return response;
- });
+ }));
+ }
}
- }
- return response;
+ });
+ return _.isEmpty(defs) ? response : $.when.apply(null, defs);
}).then(function(response) {
return self.on_processed_onchange(response);
});
@@ -1151,7 +1160,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
},
build_eval_context: function() {
var a_dataset = this.dataset;
- return new instance.web.CompoundContext(a_dataset.get_context(), this._build_view_fields_values());
+ return new instance.web.CompoundContext(this._build_view_fields_values(), a_dataset.get_context());
},
});
@@ -3244,9 +3253,7 @@ instance.web.form.FieldRadio = instance.web.form.AbstractField.extend(instance.w
click_change_value: function (event) {
var val = $(event.target).val();
val = this.field.type == "selection" ? val : +val;
- if (val == this.get_value()) {
- this.set_value(false);
- } else {
+ if (val !== this.get_value()) {
this.set_value(val);
}
},
@@ -3762,7 +3769,14 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
// disabled to solve a bug, but may cause others
//close: anyoneLoosesFocus,
minLength: 0,
- delay: 250
+ delay: 250,
+ });
+ var appendTo = this.$el.parents('.oe_view_manager_body, .modal-dialog').last();
+ if (appendTo.length === 0){
+ appendTo = '.oe_application > *';
+ }
+ this.$input.autocomplete({
+ appendTo: appendTo
});
// set position for list of suggestions box
this.$input.autocomplete( "option", "position", { my : "left top", at: "left bottom" } );
@@ -4069,16 +4083,18 @@ instance.web.form.FieldOne2Many = instance.web.form.AbstractField.extend({
var self = this;
self.load_views();
- this.is_loaded.done(function() {
- self.on("change:effective_readonly", self, function() {
- self.is_loaded = self.is_loaded.then(function() {
- self.viewmanager.destroy();
- return $.when(self.load_views()).done(function() {
- self.reload_current_view();
- });
+ var destroy = function() {
+ self.is_loaded = self.is_loaded.then(function() {
+ self.viewmanager.destroy();
+ return $.when(self.load_views()).done(function() {
+ self.reload_current_view();
});
});
+ };
+ this.is_loaded.done(function() {
+ self.on("change:effective_readonly", self, destroy);
});
+ this.view.on("on_button_cancel", self, destroy);
this.is_started = true;
this.reload_current_view();
},
diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js
index 97b3fde17bd..08d7d6f9da6 100644
--- a/addons/web/static/src/js/view_list.js
+++ b/addons/web/static/src/js/view_list.js
@@ -1537,9 +1537,11 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we
});
},
setup_resequence_rows: function (list, dataset) {
- // drag and drop enabled if list is not sorted and there is a
- // visible column with @widget=handle or "sequence" column in the view.
- if ((dataset.sort && dataset.sort())
+ // drag and drop enabled if list is not sorted (unless it is sorted by
+ // sequence (ASC)), and there is a visible column with @widget=handle
+ // or "sequence" column in the view.
+ if ((dataset.sort && dataset.sort() && dataset.sort() !== 'sequence'
+ && dataset.sort() !== 'sequence ASC')
|| !_(this.columns).any(function (column) {
return column.widget === 'handle'
|| column.name === 'sequence'; })) {
@@ -1611,7 +1613,9 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we
.filter(function (column) { return column.tag === 'field';})
.pluck('name').value(),
function (groups) {
- self.view.$pager.hide();
+ // page count is irrelevant on grouped page, replace by limit
+ self.view.$pager.find('.oe_pager_group').hide();
+ self.view.$pager.find('.oe_list_pager_state').text(self.view._limit ? self.view._limit : '∞');
$el[0].appendChild(
self.render_groups(groups));
if (post_render) { post_render(); }