summaryrefslogtreecommitdiff
path: root/addons/pad
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2017-04-26 20:07:32 +0200
committerChristophe Simonis <chs@odoo.com>2017-04-26 20:07:32 +0200
commited0233fb8ad87bf53c4e66f6bd0319f6e2f5bbd4 (patch)
treee6f0ef1f076c7b333552e3b181fde3a583402a9f /addons/pad
parentfe70f0711f2a198aa84a5bdbe1e1db703cb52831 (diff)
parent3d35aef5b07e7b362b5ca9f326dc389bec6f182e (diff)
[MERGE] forward port branch saas-11 up to 3d35aef5b07
Diffstat (limited to 'addons/pad')
-rw-r--r--addons/pad/static/src/js/pad.js61
1 files changed, 45 insertions, 16 deletions
diff --git a/addons/pad/static/src/js/pad.js b/addons/pad/static/src/js/pad.js
index dffd5c12967..d39b570d047 100644
--- a/addons/pad/static/src/js/pad.js
+++ b/addons/pad/static/src/js/pad.js
@@ -17,7 +17,9 @@ var FieldPad = form_common.AbstractField.extend(form_common.ReinitializeWidgetMi
event.preventDefault();
self.set("configured", true);
});
- this.pad_loading_request = null;
+ // CHANGES ONLY NEEDED UNTIL SAAS-15
+ // deferred for request getting pad content (readonly) or new pad url (edit)
+ this._pad_loading_deferred = null;
},
initialize_content: function() {
var self = this;
@@ -36,14 +38,25 @@ var FieldPad = form_common.AbstractField.extend(form_common.ReinitializeWidgetMi
},
render_value: function() {
var self = this;
- $.when(this._configured_deferred, this.pad_loading_request).always(function() {
+ $.when(this._configured_deferred).always(function() {
if (!self.get('configured')){
return;
}
+
+ // reject previously ongoing _pad_loading_deferred
+ if (self._pad_loading_deferred !== null) {
+ self._pad_loading_deferred.reject();
+ self.$('.oe_pad_content').removeClass('oe_pad_loading').html('');
+ }
+ self._pad_loading_deferred = $.Deferred();
+ // keep reference to current _pad_loading_deferred
+ var loading_def = self._pad_loading_deferred;
+
var value = self.get('value');
if (self.get('effective_readonly')) {
if (_.str.startsWith(value, 'http')) {
- self.pad_loading_request = self.view.dataset.call('pad_get_content', {url: value}).done(function(data) {
+ self.view.dataset.call('pad_get_content', {url: value}).then(loading_def.resolve, loading_def.reject);
+ loading_def.done(function(data) {
self.$('.oe_pad_content').removeClass('oe_pad_loading').html('<div class="oe_pad_readonly"><div>');
self.$('.oe_pad_readonly').html(data);
}).fail(function() {
@@ -54,21 +67,37 @@ var FieldPad = form_common.AbstractField.extend(form_common.ReinitializeWidgetMi
}
}
else {
- var def = $.when();
+ var def = $.Deferred();
if (! value || !_.str.startsWith(value, 'http')) {
- def = self.view.dataset.call('pad_generate_url', {
- context: {
- model: self.view.model,
- field_name: self.name,
- object_id: self.view.datarecord.id
- },
- }).then(function(data) {
- if (! data.url) {
- self.set("configured", false);
- } else {
- self.internal_set_value(data.url);
- }
+ var deferreds = [
+ self.view.dataset.call('pad_generate_url', {
+ context: {
+ model: self.view.model,
+ field_name: self.name,
+ object_id: self.view.datarecord.id
+ }
+ }),
+ // change record only after record_loaded and its call stack is finished
+ self.view.record_loaded.then(function() {
+ var call_stack_ended = $.Deferred();
+ _.defer(call_stack_ended.resolve);
+ return call_stack_ended;
+ })
+ ];
+ // delay onchange after x2many views are loaded
+ deferreds = deferreds.concat(_.compact(_.pluck(self.view.fields, 'is_loaded')));
+ $.when.apply($, deferreds).then(function(data) {
+ // update value only if loading_def has not been previously rejected
+ loading_def.resolve().done(function(){
+ if (! data.url) {
+ self.set("configured", false);
+ } else {
+ self.internal_set_value(data.url);
+ }
+ }).then(def.resolve, def.reject);
});
+ } else {
+ def.resolve();
}
def.then(function() {
value = self.get('value');