File "common.js"

Full Path: /home/siazco/grocery.siazco.se/wp-content/plugins/swedbank-pay-checkout/assets/js/common.js
File size: 6.43 KB
MIME-type: text/plain
Charset: utf-8

/* global wc_checkout_params */
jQuery( function( $ ) {
    window.wc_sb_common = {
        /**
         * Check if the Instant Checkout is active
         * @return {boolean}
         */
        isInstantCheckout() {
            return 'yes' === WC_Gateway_Swedbank_Pay_Checkout.instant_checkout;
        },

        /**
         * Check if the redirect method is active
         * @return {boolean}
         */
        isRedirectMethodEnabled() {
            return 'redirect' === WC_Gateway_Swedbank_Pay_Checkout.redirect_method;
        },

        /**
         * Load JS
         * @param js
         * @param callback
         */
        loadJs: function ( js, callback ) {
            // Creates a new script tag
            let script = document.createElement( 'script' );

            // Set script tag params
            script.setAttribute( 'src', js );
            script.setAttribute( 'type', 'text/javascript' );
            script.setAttribute( 'async', '' );
            script.addEventListener( 'load', function () {
                callback();
            }, false );

            // Gets document head element
            let oHead = document.getElementsByTagName( 'head' )[0];
            if ( oHead ) {
                // Add script tag to head
                oHead.appendChild( script );
            }

            return script;
        },

        /**
         * Wait for object is loaded
         * @param var_string
         * @param callback
         */
        waitForLoading: function ( var_string, callback ) {
            try {
                var obj = eval( var_string );
            } catch (e) {
                callback( e );
                return;
            }

            let attempts = 0;
            let timer = window.setInterval( function() {
                if ( typeof obj !== 'undefined' ) {
                    window.clearInterval( timer );
                    callback( null, obj );
                } else {
                    attempts++;
                    if ( attempts >= 120 ) {
                        window.clearInterval( timer );
                        callback( 'Timeout' );
                    }
                }
            }, 500 );
        },

        /**
         * Block the checkout form
         */
        block: function() {
            if ( typeof wc_sb_checkout !== 'undefined' ) {
                let form_data = wc_sb_checkout.form.data();
                if ( 1 !== form_data['blockUI.isBlocked'] ) {
                    wc_sb_checkout.form.block({
                        message: null,
                        overlayCSS: {
                            background: '#fff',
                            opacity: 0.6
                        }
                    });
                }
            }
        },

        /**
         * Unblock the checkout form
         */
        unblock: function() {
            if ( typeof wc_sb_checkout !== 'undefined' ) {
                wc_sb_checkout.form.unblock();
            }
        },

        /**
         * Log Error
         * @param id
         * @param data
         * @returns {*}
         */
        logError: function ( id, data ) {
            console.warn( data );

            return $.ajax( {
                type: 'POST',
                url: WC_Gateway_Swedbank_Pay_Checkout.ajax_url,
                data: {
                    action: 'swedbank_pay_checkout_log_error',
                    nonce: WC_Gateway_Swedbank_Pay_Checkout.nonce,
                    id: id,
                    data: JSON.stringify( data )
                },
                dataType: 'json'
            } );
        },

        /**
         * Validate checkout fields on the checkout form
         * @return {boolean}
         */
        validateForm: function () {
            var $required_inputs,
                validated = true;

            // check to see if we need to validate shipping address
            if ( $( '#ship-to-different-address-checkbox' ).is( ':checked' ) ) {
                $required_inputs = $( '.woocommerce-billing-fields .validate-required, .woocommerce-shipping-fields .validate-required' ).find('input, select').not( $( '#account_password, #account_username' ) );
            } else {
                $required_inputs = $( '.woocommerce-billing-fields .validate-required' ).find('input, select').not( $( '#account_password, #account_username' ) );
            }

            if ( $required_inputs.length ) {
                $required_inputs.each( function() {
                    var $this = $( this ),
                        $parent           = $this.closest( '.form-row' ),
                        validate_required = $parent.is( '.validate-required' ),
                        validate_email    = $parent.is( '.validate-email' );

                    if ( validate_required ) {
                        if ( 'checkbox' === $this.attr( 'type' ) && ! $this.is( ':checked' ) ) {
                            validated = false;
                        } else if ( $this.val() === '' ) {
                            validated = false;
                        }
                    }

                    if ( validate_email ) {
                        if ( $this.val() ) {
                            /* https://stackoverflow.com/questions/2855865/jquery-validate-e-mail-address-regex */
                            var pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);
                            if ( ! pattern.test( $this.val()  ) ) {
                                validated = false;
                            }
                        }
                    }
                });
            }

            return validated;
        },
    }
} );