diff --git a/addons/portal/static/src/js/portal_signature.js b/addons/portal/static/src/js/portal_signature.js
index 471ea3b1e4a..5ee9652f1da 100644
--- a/addons/portal/static/src/js/portal_signature.js
+++ b/addons/portal/static/src/js/portal_signature.js
@@ -55,10 +55,13 @@ var SignatureForm = publicWidget.Widget.extend({
* @override
*/
start: function () {
+ var self = this;
this.$confirm_btn = this.$('.o_portal_sign_submit');
this.$controls = this.$('.o_portal_sign_controls');
- this.nameAndSignature.replace(this.$('.o_web_sign_name_and_signature'));
- return this._super.apply(this, arguments);
+ var subWidgetStart = this.nameAndSignature.replace(this.$('.o_web_sign_name_and_signature'));
+ return Promise.all([subWidgetStart, this._super.apply(this, arguments)]).then(function () {
+ self.nameAndSignature.resetSignature();
+ });
},
//----------------------------------------------------------------------
diff --git a/addons/web/static/src/js/fields/signature.js b/addons/web/static/src/js/fields/signature.js
index 6011cf7bf3f..e27ec36e01a 100644
--- a/addons/web/static/src/js/fields/signature.js
+++ b/addons/web/static/src/js/fields/signature.js
@@ -56,7 +56,18 @@ var SignatureDialog = Dialog.extend({
this.nameAndSignature = new NameAndSignature(this, options.nameAndSignatureOptions);
},
/**
- * Inserts the name and signature.
+ * Start the nameAndSignature widget and wait for it.
+ *
+ * @override
+ */
+ willStart: function () {
+ return Promise.all([
+ this.nameAndSignature.appendTo($('
')),
+ this._super.apply(this, arguments)
+ ]);
+ },
+ /**
+ * Initialize the name and signature widget when the modal is opened.
*
* @override
*/
@@ -65,7 +76,9 @@ var SignatureDialog = Dialog.extend({
this.$primaryButton = this.$footer.find('.btn-primary');
this.opened().then(function () {
- self.nameAndSignature.replace(self.$('.o_web_sign_name_and_signature'));
+ self.$('.o_web_sign_name_and_signature').replaceWith(self.nameAndSignature.$el);
+ // initialize the signature area
+ self.nameAndSignature.resetSignature();
});
return this._super.apply(this, arguments);
diff --git a/addons/web/static/src/js/widgets/name_and_signature.js b/addons/web/static/src/js/widgets/name_and_signature.js
index 57a9a697494..0dda31050c0 100644
--- a/addons/web/static/src/js/widgets/name_and_signature.js
+++ b/addons/web/static/src/js/widgets/name_and_signature.js
@@ -144,10 +144,7 @@ var NameAndSignature = Widget.extend({
self.resetSignature();
}, 250));
- return this._super.apply(this, arguments).then(function () {
- // initialize the signature area
- return self.resetSignature();
- });
+ return this._super.apply(this, arguments);
},
/**
* @override
diff --git a/addons/web/static/tests/fields/signature.js b/addons/web/static/tests/fields/signature.js
index 43f9bf7b502..fc85832da15 100644
--- a/addons/web/static/tests/fields/signature.js
+++ b/addons/web/static/tests/fields/signature.js
@@ -65,6 +65,8 @@ QUnit.module('signature', {
"should have a valid signature widget");
// Click on the widget to open signature modal
await testUtils.dom.click(form.$('div[name=sign] div.o_signature'));
+ await testUtils.nextTick(); // dialog xmlDependencies load
+- await testUtils.nextTick(); // name_and_signature xmlDependencies load
assert.strictEqual($('.modal .modal-body a.o_web_sign_auto_button').length, 1,
'should open a modal with "Auto" button');
assert.strictEqual($('.modal .modal-body .o_web_sign_name_input').val(), "Pop's Chock'lit",
@@ -99,6 +101,8 @@ QUnit.module('signature', {
"should have a valid signature widget");
// Click on the widget to open signature modal
await testUtils.dom.click(form.$('div[name=sign] div.o_signature'));
+ await testUtils.nextTick(); // dialog xmlDependencies load
+- await testUtils.nextTick(); // name_and_signature xmlDependencies load
assert.strictEqual($('.modal .modal-body a.o_web_sign_auto_button').length, 1,
'should open a modal with "Auto" button');
assert.strictEqual($('.modal .modal-body .o_web_sign_name_input').val(), "Veggie Burger",