diff options
| author | Christophe Simonis <chs@odoo.com> | 2015-01-06 11:49:04 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2015-01-06 11:49:04 +0100 |
| commit | fab4d6d442ebbf081ead7e747f04b61e01ae9db2 (patch) | |
| tree | 3dd9aad0f429f4229e500db503bbf8b7155f9c38 /addons/web/static/src/js | |
| parent | 7fea986fd9f6f3ce1cc6c015a2523fdd23cf814d (diff) | |
| parent | ea54d4af9f75e518c5871213a668a9f516e56830 (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.js | 14 | ||||
| -rw-r--r-- | addons/web/static/src/js/view_form.js | 100 | ||||
| -rw-r--r-- | addons/web/static/src/js/view_list.js | 12 |
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(); } |
