mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-11-04 00:27:32 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			104 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
			Vendored
		
	
	
	
/**
 | 
						|
 * Invoice Ninja (https://invoiceninja.com)
 | 
						|
 *
 | 
						|
 * @link https://github.com/invoiceninja/invoiceninja source repository
 | 
						|
 *
 | 
						|
 * @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
 | 
						|
 *
 | 
						|
 * @license https://opensource.org/licenses/AAL
 | 
						|
 */
 | 
						|
 | 
						|
class Approve {
 | 
						|
    constructor(displaySignature, displayTerms) {
 | 
						|
        this.shouldDisplaySignature = displaySignature;
 | 
						|
        this.shouldDisplayTerms = displayTerms;
 | 
						|
        this.termsAccepted = false;
 | 
						|
    }
 | 
						|
 | 
						|
    submitForm() {
 | 
						|
        document.getElementById('approve-form').submit();
 | 
						|
    }
 | 
						|
 | 
						|
    displaySignature() {
 | 
						|
        let displaySignatureModal = document.getElementById(
 | 
						|
            'displaySignatureModal'
 | 
						|
        );
 | 
						|
        displaySignatureModal.removeAttribute('style');
 | 
						|
 | 
						|
        const signaturePad = new SignaturePad(
 | 
						|
            document.getElementById('signature-pad'),
 | 
						|
            {
 | 
						|
                penColor: 'rgb(0, 0, 0)',
 | 
						|
            }
 | 
						|
        );
 | 
						|
 | 
						|
        this.signaturePad = signaturePad;
 | 
						|
    }
 | 
						|
 | 
						|
    displayTerms() {
 | 
						|
        let displayTermsModal = document.getElementById("displayTermsModal");
 | 
						|
        displayTermsModal.removeAttribute("style");
 | 
						|
    }
 | 
						|
 | 
						|
    handle() {
 | 
						|
        document
 | 
						|
            .getElementById('approve-button')
 | 
						|
            .addEventListener('click', () => {
 | 
						|
                if (this.shouldDisplaySignature && this.shouldDisplayTerms) {
 | 
						|
                    this.displaySignature();
 | 
						|
 | 
						|
                    document
 | 
						|
                        .getElementById('signature-next-step')
 | 
						|
                        .addEventListener('click', () => {
 | 
						|
                            this.displayTerms();
 | 
						|
 | 
						|
                            document
 | 
						|
                                .getElementById('accept-terms-button')
 | 
						|
                                .addEventListener('click', () => {
 | 
						|
                                    document.querySelector(
 | 
						|
                                        'input[name="signature"'
 | 
						|
                                    ).value = this.signaturePad.toDataURL();
 | 
						|
                                    this.termsAccepted = true;
 | 
						|
                                    this.submitForm();
 | 
						|
                                });
 | 
						|
                        });
 | 
						|
                }
 | 
						|
 | 
						|
                if (this.shouldDisplaySignature && !this.shouldDisplayTerms) {
 | 
						|
                    this.displaySignature();
 | 
						|
 | 
						|
                    document
 | 
						|
                        .getElementById('signature-next-step')
 | 
						|
                        .addEventListener('click', () => {
 | 
						|
                            document.querySelector(
 | 
						|
                                'input[name="signature"'
 | 
						|
                            ).value = this.signaturePad.toDataURL();
 | 
						|
                            this.submitForm();
 | 
						|
                        });
 | 
						|
                }
 | 
						|
 | 
						|
                if (!this.shouldDisplaySignature && this.shouldDisplayTerms) {
 | 
						|
                    this.displayTerms();
 | 
						|
 | 
						|
                    document
 | 
						|
                        .getElementById('accept-terms-button')
 | 
						|
                        .addEventListener('click', () => {
 | 
						|
                            this.termsAccepted = true;
 | 
						|
                            this.submitForm();
 | 
						|
                        });
 | 
						|
                }
 | 
						|
 | 
						|
                if (!this.shouldDisplaySignature && !this.shouldDisplayTerms) {
 | 
						|
                    this.submitForm();
 | 
						|
                }
 | 
						|
            });
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
const signature = document.querySelector('meta[name="require-quote-signature"]')
 | 
						|
    .content;
 | 
						|
 | 
						|
const terms = document.querySelector('meta[name="show-quote-terms"]').content;
 | 
						|
 | 
						|
new Approve(Boolean(+signature), Boolean(+terms)).handle();
 |