{"version":3,"sources":["llms-form-checkout.js"],"names":["$","window","llms","checkout","before_submit","gateways","this","$checkout_form","$confirm_form","$form_sections","form_action","init","self","length","bind_login","find","on","submit","add_before_submit_event","data","LLMS","PasswordStrength","handler","bind_coupon","bind_gateways","processing","obj","push","add_error","message","id","$err","prepend","append","console","error","add_gateway","gateway_class","e","preventDefault","slideToggle","coupon_apply","coupon_remove","load_gateways","removeAttr","each","$el","$parent","closest","$fields","checked","is","trigger","val","$selector","attr","$submit","slideUp","slideDown","clear_errors","remove","$btn","code","$messages","$errors","$container","Spinner","start","Ajax","call","action","plan_id","beforeSend","hide","success","r","stop","$message","empty","appendTo","show","replaceWith","coupon_html","gateways_html","summary_html","focus_errors","animate","scrollTop","offset","top","i","g","undefined","bind","func","$form","interval","num","checks","errors","finishes","successes","setInterval","clear","off","clearInterval","jQuery"],"mappings":"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","file":"../../js/llms-form-checkout.min.js","sourcesContent":["/**\n * LifterLMS Checkout Screen related events and interactions\n *\n * @package LifterLMS/Scripts\n *\n * @since 3.0.0\n * @version 3.34.5\n */\n\n( function( $ ) {\n\n\tvar llms_checkout = function() {\n\n\t\t/**\n\t\t * Array of validation functions to call on form submission\n\t\t *\n\t\t * @type array\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tvar before_submit = [];\n\n\t\t/**\n\t\t * Array of gateways to be automatically bound when needed\n\t\t *\n\t\t * @type array\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tvar gateways = [];\n\n\t\tthis.$checkout_form = $( '#llms-product-purchase-form' );\n\t\tthis.$confirm_form = $( '#llms-product-purchase-confirm-form' );\n\t\tthis.$form_sections = false;\n\t\tthis.form_action = false;\n\n\t\t/**\n\t\t * Initialize checkout JS & bind if on the checkout screen\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.34.5 Make sure we bind click events for the Show / Hide login area at the top of the checkout screen\n\t\t * even if there's no llms product purchase form.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.init = function() {\n\n\t\t\tvar self = this;\n\n\t\t\tif ( $( '.llms-checkout-wrapper' ).length ) {\n\t\t\t\tthis.bind_login();\n\t\t\t}\n\n\t\t\tif ( this.$checkout_form.length ) {\n\n\t\t\t\tthis.form_action = 'checkout';\n\t\t\t\tthis.$form_sections = this.$checkout_form.find( '.llms-checkout-section' );\n\n\t\t\t\tthis.$checkout_form.on( 'submit', this, this.submit );\n\n\t\t\t\t// add before submit event for password strength meter if one's found\n\t\t\t\tif ( $( '.llms-password-strength-meter' ).length ) {\n\t\t\t\t\tthis.add_before_submit_event( {\n\t\t\t\t\t\tdata: LLMS.PasswordStrength,\n\t\t\t\t\t\thandler: LLMS.PasswordStrength.checkout,\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tthis.bind_coupon();\n\n\t\t\t\tthis.bind_gateways();\n\n\t\t\t} else if ( this.$confirm_form.length ) {\n\n\t\t\t\tthis.form_action = 'confirm';\n\t\t\t\tthis.$form_sections = this.$confirm_form.find( '.llms-checkout-section' );\n\n\t\t\t\tthis.$confirm_form.on( 'submit', function() {\n\t\t\t\t\tself.processing( 'start' );\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Public function which allows other classes or extensions to add\n\t\t * before submit events to llms checkout private \"before_submit\" array\n\t\t *\n\t\t * @param object obj object of data to push to the array\n\t\t * requires at least a \"handler\" key which should pass a callable function\n\t\t * \"data\" can be anything, will be passed as the first parameter to the handler function\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.add_before_submit_event = function( obj ) {\n\n\t\t\tif ( ! obj.handler || 'function' !== typeof obj.handler ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( ! obj.data ) {\n\t\t\t\tobj.data = null;\n\t\t\t}\n\n\t\t\tbefore_submit.push( obj );\n\n\t\t};\n\n\t\t/**\n\t\t * Add an error message\n\t\t *\n\t\t * @param string message error message string\n\t\t * @param mixed data optional error data to output on the console\n\t\t * @return void\n\t\t * @since 3.27.0\n\t\t * @version 3.27.0\n\t\t */\n\t\tthis.add_error = function( message, data ) {\n\n\t\t\tvar id = 'llms-checkout-errors';\n\t\t\t\t$err = $( '#' + id );\n\n\t\t\tif ( ! $err.length ) {\n\t\t\t\t$err = $( '<ul class=\"llms-notice llms-error\" id=\"' + id + '\" />' );\n\t\t\t\t$( '.llms-checkout-wrapper' ).prepend( $err );\n\t\t\t}\n\n\t\t\t$err.append( '<li>' + message + '</li>' );\n\n\t\t\tif ( data ) {\n\t\t\t\tconsole.error( data );\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Public function which allows other classes or extensions to add\n\t\t * gateways classes that should be bound by this class\n\t\t *\n\t\t * @param obj gateway_class callable class object\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.add_gateway = function( gateway_class ) {\n\n\t\t\tgateways.push( gateway_class );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind coupon add & remove button events\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.bind_coupon = function() {\n\n\t\t\tvar self = this;\n\n\t\t\t// show & hide the coupon field & button\n\t\t\t$( 'a[href=\"#llms-coupon-toggle\"]' ).on( 'click', function( e ) {\n\n\t\t\t\te.preventDefault();\n\t\t\t\t$( '.llms-coupon-entry' ).slideToggle( 400 );\n\n\t\t\t} );\n\n\t\t\t// apply coupon click\n\t\t\t$( '#llms-apply-coupon' ).on( 'click', function( e ) {\n\n\t\t\t\te.preventDefault();\n\t\t\t\tself.coupon_apply( $( this ) );\n\n\t\t\t} );\n\n\t\t\t// remove coupon click\n\t\t\t$( '#llms-remove-coupon' ).on( 'click', function( e ) {\n\n\t\t\t\te.preventDefault();\n\t\t\t\tself.coupon_remove( $( this ) );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind gateway section events\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.bind_gateways = function() {\n\n\t\t\tthis.load_gateways();\n\n\t\t\tif ( ! $( 'input[name=\"llms_payment_gateway\"]' ).length ) {\n\t\t\t\t$( '#llms_create_pending_order' ).removeAttr( 'disabled' );\n\t\t\t}\n\n\t\t\t// add class and trigger watchable event when gateway selection changes\n\t\t\t$( 'input[name=\"llms_payment_gateway\"]' ).on( 'change', function() {\n\n\t\t\t\t$( 'input[name=\"llms_payment_gateway\"]' ).each( function() {\n\n\t\t\t\t\tvar $el = $( this ),\n\t\t\t\t\t\t$parent = $el.closest( '.llms-payment-gateway' ),\n\t\t\t\t\t\t$fields = $parent.find( '.llms-gateway-fields' ).find( 'input, textarea, select' ),\n\t\t\t\t\t\tchecked = $el.is( ':checked' ),\n\t\t\t\t\t\tdisplay_func = ( checked ) ? 'addClass' : 'removeClass';\n\n\t\t\t\t\t$parent[ display_func ]( 'is-selected' );\n\n\t\t\t\t\tif ( checked ) {\n\n\t\t\t\t\t\t// enable fields\n\t\t\t\t\t\t$fields.removeAttr( 'disabled' );\n\n\t\t\t\t\t\t// emit a watchable event for extensions to hook onto\n\t\t\t\t\t\t$( '.llms-payment-gateways' ).trigger( 'llms-gateway-selected', {\n\t\t\t\t\t\t\tid: $el.val(),\n\t\t\t\t\t\t\t$selector: $parent,\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// disable fields\n\t\t\t\t\t\t$fields.attr( 'disabled', 'disabled' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t\t// enable / disable buttons depending on field validation status\n\t\t\t$( '.llms-payment-gateways' ).on( 'llms-gateway-selected', function( e, data ) {\n\n\t\t\t\tvar $submit = $( '#llms_create_pending_order' );\n\n\t\t\t\tif ( data.$selector && data.$selector.find( '.llms-gateway-fields .invalid' ).length ) {\n\t\t\t\t\t$submit.attr( 'disabled', 'disabled' );\n\t\t\t\t} else {\n\t\t\t\t\t$submit.removeAttr( 'disabled' );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind click events for the Show / Hide login area at the top of the checkout screen\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.34.5 When showing the login form area make sure we slide up the `.llms-notice` link's parent too.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.bind_login = function() {\n\n\t\t\t$( 'a[href=\"#llms-show-login\"]' ).on( 'click', function( e ) {\n\n\t\t\t\te.preventDefault();\n\t\t\t\t$( this ).closest( '.llms-info,.llms-notice' ).slideUp( 400 );\n\t\t\t\t$( 'form.llms-login' ).slideDown( 400 );\n\n\t\t\t} );\n\t\t};\n\n\t\t/**\n\t\t * Clear error messages\n\t\t *\n\t\t * @return void\n\t\t * @since 3.27.0\n\t\t * @version 3.27.0\n\t\t */\n\t\tthis.clear_errors = function() {\n\t\t\t$( '#llms-checkout-errors' ).remove();\n\t\t};\n\n\t\t/**\n\t\t * Triggered by clicking the \"Apply Coupon\" Button\n\t\t * Validates the coupon via JS and adds error / success messages\n\t\t * On success it will replace partials on the checkout screen with updated\n\t\t * prices and a \"remove coupon\" button\n\t\t *\n\t\t * @param obj $btn jQuery selector of the Apply button\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.coupon_apply = function ( $btn ) {\n\n\t\t\tvar self = this,\n\t\t\t\t$code = $( '#llms_coupon_code' ),\n\t\t\t\tcode = $code.val(),\n\t\t\t\t$messages = $( '.llms-coupon-messages' ),\n\t\t\t\t$errors = $messages.find( '.llms-error' ),\n\t\t\t\t$container = $( 'form.llms-checkout' );\n\n\t\t\tLLMS.Spinner.start( $container );\n\n\t\t\twindow.LLMS.Ajax.call( {\n\t\t\t\tdata: {\n\t\t\t\t\taction: 'validate_coupon_code',\n\t\t\t\t\tcode: code,\n\t\t\t\t\tplan_id: $( '#llms-plan-id' ).val(),\n\t\t\t\t},\n\t\t\t\tbeforeSend: function() {\n\n\t\t\t\t\t$errors.hide();\n\n\t\t\t\t},\n\t\t\t\tsuccess: function( r ) {\n\n\t\t\t\t\tLLMS.Spinner.stop( $container );\n\n\t\t\t\t\tif ( 'error' === r.code ) {\n\n\t\t\t\t\t\tvar $message = $( '<li>' + r.message + '</li>' );\n\n\t\t\t\t\t\tif ( ! $errors.length ) {\n\n\t\t\t\t\t\t\t$errors = $( '<ul class=\"llms-notice llms-error\" />' );\n\t\t\t\t\t\t\t$messages.append( $errors );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t$errors.empty();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$message.appendTo( $errors );\n\t\t\t\t\t\t$errors.show();\n\n\t\t\t\t\t} else if ( r.success ) {\n\n\t\t\t\t\t\t$( '.llms-coupon-wrapper' ).replaceWith( r.data.coupon_html );\n\t\t\t\t\t\tself.bind_coupon();\n\n\t\t\t\t\t\t$( '.llms-payment-gateways' ).replaceWith( r.data.gateways_html );\n\t\t\t\t\t\tself.bind_gateways();\n\n\t\t\t\t\t\t$( '.llms-order-summary' ).replaceWith( r.data.summary_html );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Called by clicking the \"Remove Coupon\" button\n\t\t * Removes the coupon via AJAX and unsets related session data\n\t\t *\n\t\t * @param obj $btn jQuery selector of the Remove button\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.coupon_remove = function( $btn ) {\n\n\t\t\tvar self = this,\n\t\t\t\t$container = $( 'form.llms-checkout' );\n\n\t\t\tLLMS.Spinner.start( $container );\n\n\t\t\twindow.LLMS.Ajax.call( {\n\t\t\t\tdata: {\n\t\t\t\t\taction: 'remove_coupon_code',\n\t\t\t\t\tplan_id: $( '#llms-plan-id' ).val(),\n\t\t\t\t},\n\t\t\t\tsuccess: function( r ) {\n\n\t\t\t\t\tLLMS.Spinner.stop( $container );\n\n\t\t\t\t\tif ( r.success ) {\n\n\t\t\t\t\t\t$( '.llms-coupon-wrapper' ).replaceWith( r.data.coupon_html );\n\t\t\t\t\t\tself.bind_coupon();\n\n\t\t\t\t\t\t$( '.llms-order-summary' ).replaceWith( r.data.summary_html );\n\n\t\t\t\t\t\t$( '.llms-payment-gateways' ).replaceWith( r.data.gateways_html );\n\t\t\t\t\t\tself.bind_gateways();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Scroll error messages into view\n\t\t *\n\t\t * @return void\n\t\t * @since 3.27.0\n\t\t * @version 3.27.0\n\t\t */\n\t\tthis.focus_errors = function() {\n\t\t\t$( 'html, body' ).animate( {\n\t\t\t\tscrollTop: $( '#llms-checkout-errors' ).offset().top - 50,\n\t\t\t}, 200 );\n\t\t};\n\n\t\t/**\n\t\t * Bind external gateway JS\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.load_gateways = function() {\n\n\t\t\tfor ( var i = 0; i <= gateways.length; i++ ) {\n\t\t\t\tvar g = gateways[i];\n\t\t\t\tif ( typeof g === 'object' && g !== null ) {\n\t\t\t\t\tif ( g.bind !== undefined && 'function' === typeof g.bind ) {\n\t\t\t\t\t\tg.bind();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Start or stop processing events on the checkout form\n\t\t *\n\t\t * @param string action whether to start or stop processing [start|stop]\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.24.1\n\t\t */\n\t\tthis.processing = function( action ) {\n\n\t\t\tvar func, $form;\n\n\t\t\tswitch ( action ) {\n\n\t\t\t\tcase 'stop':\n\t\t\t\t\tfunc = 'removeClass';\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'start':\n\t\t\t\tdefault:\n\t\t\t\t\tfunc = 'addClass';\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( 'checkout' === this.form_action ) {\n\t\t\t\t$form = this.$checkout_form;\n\t\t\t} else if ( 'confirm' === this.form_action ) {\n\t\t\t\t$form = this.$confirm_form;\n\t\t\t}\n\n\t\t\t$form[ func ]( 'llms-is-processing' );\n\t\t\tLLMS.Spinner[ action ]( this.$form_sections );\n\n\t\t};\n\n\t\t/**\n\t\t * Handles form submission\n\t\t * Calls all validation events in `before_submit[]`\n\t\t * waits for call backs and either displays returned errors\n\t\t * or submits the form when all are successful\n\t\t *\n\t\t * @param obj e JS event object\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.27.0\n\t\t */\n\t\tthis.submit = function( e ) {\n\n\t\t\tvar self = e.data,\n\t\t\t\tnum = before_submit.length,\n\t\t\t\tchecks = 0,\n\t\t\t\tmax_checks = 60000,\n\t\t\t\terrors = [],\n\t\t\t\tfinishes = 0,\n\t\t\t\tsuccesses = 0,\n\t\t\t\tinterval;\n\n\t\t\te.preventDefault();\n\n\t\t\t// add spinners\n\t\t\tself.processing( 'start' );\n\n\t\t\t// remove errors to prevent duplicates\n\t\t\tself.clear_errors();\n\n\t\t\t// start running all the events\n\t\t\tfor ( var i = 0; i < before_submit.length; i++ ) {\n\n\t\t\t\tvar obj = before_submit[ i ];\n\n\t\t\t\tobj.handler( obj.data, function( r ) {\n\n\t\t\t\t\tfinishes++;\n\t\t\t\t\tif ( true === r ) {\n\t\t\t\t\t\tsuccesses++;\n\t\t\t\t\t} else if ( 'string' === typeof r ) {\n\t\t\t\t\t\terrors.push( r );\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\t// run an interval to wait for finishes\n\t\t\tinterval = setInterval( function() {\n\n\t\t\t\tvar clear = false,\n\t\t\t\t\tstop = false;\n\n\t\t\t\t// timeout...\n\t\t\t\tif ( checks >= max_checks ) {\n\n\t\t\t\t\tclear = true;\n\t\t\t\t\tstop = true;\n\n\t\t\t\t} else if ( num === finishes ) {\n\t\t\t\t\t// everything has finished\n\n\t\t\t\t\t// all were successful, submit the form\n\t\t\t\t\tif ( num === successes ) {\n\n\t\t\t\t\t\tclear = true;\n\n\t\t\t\t\t\tself.$checkout_form.off( 'submit', self.submit );\n\t\t\t\t\t\tself.$checkout_form.trigger( 'submit' );\n\n\t\t\t\t\t} else if ( errors.length ) {\n\n\t\t\t\t\t\tclear = true;\n\t\t\t\t\t\tstop = true;\n\n\t\t\t\t\t\tfor ( var i = 0; i < errors.length; i++ ) {\n\t\t\t\t\t\t\tself.add_error( errors[ i ] );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tself.focus_errors();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( clear ) {\n\t\t\t\t\tclearInterval( interval );\n\t\t\t\t}\n\n\t\t\t\tif ( stop ) {\n\t\t\t\t\tself.processing( 'stop' );\n\t\t\t\t}\n\n\t\t\t\tchecks++;\n\n\t\t\t}, 100 );\n\n\t\t};\n\n\t\t// initialize\n\t\tthis.init();\n\n\t\treturn this;\n\n\t};\n\n\twindow.llms = window.llms || {};\n\twindow.llms.checkout = new llms_checkout();\n\n} )( jQuery );\n"],"sourceRoot":"../../js"}