summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/signature_dialog.js
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/web/static/src/js/views/signature_dialog.js
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/web/static/src/js/views/signature_dialog.js')
-rw-r--r--addons/web/static/src/js/views/signature_dialog.js121
1 files changed, 121 insertions, 0 deletions
diff --git a/addons/web/static/src/js/views/signature_dialog.js b/addons/web/static/src/js/views/signature_dialog.js
new file mode 100644
index 00000000..12bb18f4
--- /dev/null
+++ b/addons/web/static/src/js/views/signature_dialog.js
@@ -0,0 +1,121 @@
+odoo.define('web.signature_dialog', function (require) {
+"use strict";
+
+var core = require('web.core');
+var Dialog = require('web.Dialog');
+var NameAndSignature = require('web.name_and_signature').NameAndSignature;
+
+var _t = core._t;
+
+// The goal of this dialog is to ask the user a signature request.
+// It uses @see SignNameAndSignature for the name and signature fields.
+var SignatureDialog = Dialog.extend({
+ template: 'web.signature_dialog',
+ xmlDependencies: Dialog.prototype.xmlDependencies.concat(
+ ['/web/static/src/xml/name_and_signature.xml']
+ ),
+ custom_events: {
+ 'signature_changed': '_onChangeSignature',
+ },
+
+ /**
+ * @constructor
+ * @param {Widget} parent
+ * @param {Object} options
+ * @param {string} [options.title='Adopt Your Signature'] - modal title
+ * @param {string} [options.size='medium'] - modal size
+ * @param {Object} [options.nameAndSignatureOptions={}] - options for
+ * @see NameAndSignature.init()
+ */
+ init: function (parent, options) {
+ var self = this;
+ options = options || {};
+
+ options.title = options.title || _t("Adopt Your Signature");
+ options.size = options.size || 'medium';
+ options.technical = false;
+
+ if (!options.buttons) {
+ options.buttons = [];
+ options.buttons.push({text: _t("Adopt and Sign"), classes: "btn-primary", disabled: true, click: function (e) {
+ self._onConfirm();
+ }});
+ options.buttons.push({text: _t("Cancel"), close: true});
+ }
+
+ this._super(parent, options);
+
+ this.nameAndSignature = new NameAndSignature(this, options.nameAndSignatureOptions);
+ },
+ /**
+ * Start the nameAndSignature widget and wait for it.
+ *
+ * @override
+ */
+ willStart: function () {
+ return Promise.all([
+ this.nameAndSignature.appendTo($('<div>')),
+ this._super.apply(this, arguments)
+ ]);
+ },
+ /**
+ * Initialize the name and signature widget when the modal is opened.
+ *
+ * @override
+ */
+ start: function () {
+ var self = this;
+ this.$primaryButton = this.$footer.find('.btn-primary');
+
+ this.opened().then(function () {
+ self.$('.o_web_sign_name_and_signature').replaceWith(self.nameAndSignature.$el);
+ // initialize the signature area
+ self.nameAndSignature.resetSignature();
+ });
+
+ return this._super.apply(this, arguments);
+ },
+
+ //----------------------------------------------------------------------
+ // Public
+ //----------------------------------------------------------------------
+
+ /**
+ * Returns whether the drawing area is currently empty.
+ *
+ * @see NameAndSignature.isSignatureEmpty()
+ * @returns {boolean} Whether the drawing area is currently empty.
+ */
+ isSignatureEmpty: function () {
+ return this.nameAndSignature.isSignatureEmpty();
+ },
+
+ //----------------------------------------------------------------------
+ // Handlers
+ //----------------------------------------------------------------------
+
+ /**
+ * Toggles the submit button depending on the signature state.
+ *
+ * @private
+ */
+ _onChangeSignature: function () {
+ var isEmpty = this.nameAndSignature.isSignatureEmpty();
+ this.$primaryButton.prop('disabled', isEmpty);
+ },
+ /**
+ * Upload the signature image when confirm.
+ *
+ * @private
+ */
+ _onConfirm: function (fct) {
+ this.trigger_up('upload_signature', {
+ name: this.nameAndSignature.getName(),
+ signatureImage: this.nameAndSignature.getSignatureImage(),
+ });
+ },
+});
+
+return SignatureDialog;
+
+});