1(function($){ 2 3 window.GPMultiPageNavigation = function( args ) { 4 5 var self = this; 6 7 self.formId = args.formId; 8 self.$formElem = $( 'form#gform_' + self.formId ); 9 10 self.lastPage = args.lastPage; 11 self.activationType = args.activationType; 12 self.labels = args.labels; 13 self.enableSubmissionFromLastPageWithErrors = args.enableSubmissionFromLastPageWithErrors; 14 15 self.init = function() { 16 17 if( self.$formElem.length <= 0 ) { 18 self.$formElem = $( '#gform_wrapper_' + self.formId ); 19 } 20 21 // set page specific elements 22 self.$footer = $( '#gform_page_' + self.formId + '_' + self.getCurrentPage() + ' .gform_page_footer' ); 23 self.$saveAndContinueButton = self.$footer.find( 'a.gform_save_link' ); 24 25 if( self.activationType == 'last_page' && ! self.isLastPageReached() ) { 26 return; 27 } 28 29 var $steps = self.$formElem.find( '.gf_step' ); 30 31 $steps.each( function() { 32 33 var stepNumber = parseInt( $( this ).find( 'span.gf_step_number' ).text() ); 34 35 if( self.activationType == 'progression' && stepNumber > self.getPageProgression() ) { 36 return; 37 } 38 39 if( stepNumber != self.getCurrentPage() ) { 40 $( this ).html( self.getPageLinkMarkup( stepNumber, $( this ).html() ) ).addClass( 'gpmpn-step-linked' ); 41 } else { 42 $( this ).addClass( 'gpmpn-step-current' ); 43 } 44 45 } ); 46 47 if( self.activationType == 'last_page' && ! self.isLastPage() && self.isLastPageReached() ) { 48 self.addBackToLastPageButton(); 49 } else if( self.activationType == 'progression' && self.getCurrentPage() < self.getPageProgression() ) { 50 self.addBackToLastPageButton( self.getPageProgression() ); 51 } else if( self.activationType == 'first_page' && ! self.isLastPage() && self.wasFinalSubmissionAttempted() ) { 52 self.addNextPageWithErrorsButton(); 53 } 54 55 var pageLinksSelector = 'a.gpmpn-page-link, a.gwmpn-page-link, .gpmpn-page-link a'; 56 57 $( document ).on( 'click', pageLinksSelector, function( event ) { 58 event.preventDefault(); 59 60 var hrefArray = $( this ).attr( 'href' ).split( '#' ); 61 62 if( hrefArray.length >= 2 ) { 63 64 var $parentForm = $( this ).parents( 'form' ), 65 $formElem = $parentForm.length > 0 ? $parentForm : $( '.gform_wrapper form' ), 66 // Get form element for WC GF Add-on. 67 $formElem = $formElem.length > 0 ? $formElem : $( '.gform_wrapper' ).parent( 'form' ), 68 formId = $formElem.attr( 'id' ).split( '_' )[1], 69 pageNumber = hrefArray.pop(); 70 71 GPMultiPageNavigation.postToPage( pageNumber, formId, true ); 72 73 } 74 75 } ); 76 77 self.$formElem.data( 'GPMultiPageNavigation', self ); 78 79 window[ 'gpmpn_' + self.formId ] = self; 80 81 }; 82 83 self.getPageLinkMarkup = function( stepNumber, content ) { 84 return '<a href="#' + stepNumber + '" class="gwmpn-page-link gwmpn-default gpmpn-page-link gpmpn-default">' + content + '</a>'; 85 }; 86 87 self.addBackToLastPageButton = function( page ) { 88 89 var page = typeof page == 'undefined' ? self.lastPage : page, 90 $button = '<input type="button" onclick="GPMultiPageNavigation.postToPage( ' + page + ', ' + self.formId + ' );" value="' + self.labels.backToLastPage + '" class="button gform_button gform_last_page_button">'; 91 92 self.insertButton( $button ); 93 94 }; 95 96 self.addNextPageWithErrorsButton = function() { 97 98 var page = 0, 99 label = self.getErrorPagesCount() > 1 ? self.labels.nextPageWithErrors : self.labels.submit, 100 cssClass = self.getErrorPagesCount() > 1 ? 'gform_next_page_errors_button' : 'gform_resubmit_button', 101 $button = '<input type="button" onclick="GPMultiPageNavigation.postToPage( ' + page + ', ' + self.formId + ' );" value="' + label + '" class="button gform_button ' + cssClass + '">'; 102 103 if( self.getErrorPagesCount() <= 1 && ! self.enableSubmissionFromLastPageWithErrors ) { 104 self.addBackToLastPageButton(); 105 } else { 106 self.insertButton( $button ); 107 } 108 109 }; 110 111 self.insertButton = function( $button ) { 112 if( self.$saveAndContinueButton.length > 0 ) { 113 self.$saveAndContinueButton.before( $button ); 114 } else { 115 self.$footer.append( $button ); 116 } 117 }; 118 119 self.getCurrentPage = function() { 120 121 if( ! self.currentPage ) {
122 self.currentPage = self.$formElem.find( 'input#gform_source_page_number_' + self.formId ).val(); 123 } 124 125 return self.currentPage; 126 }; 127 128 self.getPageProgression = function() { 129 return parseInt( $( 'input#gw_page_progression' ).val() ); 130 }; 131 132 self.getErrorPagesCount = function() { 133 134 if( ! self.errorPagesCount ) { 135 self.errorPagesCount = self.$formElem.find( 'input#gw_error_pages_count' ).val(); 136 } 137 138 return self.errorPagesCount; 139 }; 140 141 self.isLastPage = function() { 142 return self.getCurrentPage() >= self.lastPage; 143 }; 144 145 self.isLastPageReached = function() { 146 return self.isLastPage() || self.$formElem.find( 'input#gw_last_page_reached' ).val() == true; 147 }; 148 149 self.wasFinalSubmissionAttempted = function() { 150 return self.$formElem.find( 'input#gw_final_submission_attempted' ).val() == true 151 }; 152 153 GPMultiPageNavigation.postToPage = function( page, formId, bypassValidation ) { 154 155 var $form = $( 'form#gform_' + formId ),
156 $targetPageInput = $form.find( 'input#gform_target_page_number_' + formId ); 157 158 $targetPageInput.val( page ); 159 160 if( bypassValidation ) { 161 var $bypassValidationInput = $( '<input type="hidden" name="gw_bypass_validation" id="gw_bypass_validation" value="1" />' ); 162 $form.append( $bypassValidationInput ); 163 } 164 165 /** 166 * If submit buttons are hidden via conditional logic (next/prev/submit), form will not be able to submit; this code finds 167 * all hidden submit inputs and hides them in a way that will still enable submission. 168 */ 169 $form.find( '.gform_page_footer:visible' ).find( 'input[type="submit"], input[type="button"]' ).not( ':visible' ).css( { display: 'block', visibility: 'hidden', position: 'absolute' } ); 170 171 /** 172 * If attempting to submit the form (page = 0, happens w/ "Next Page with Errors" button), move the Submit 173 * button to the current page so Gravity Forms will not abort the submission. 174 */ 175 $( '#gform_submit_button_' + formId ).appendTo( '.gform_page_footer:visible' ).css( { display: 'block', visibility: 'hidden', position: 'absolute' } ); 176 177 $form.submit(); 178 179 }; 180 181 self.init(); 182 183 } 184 185})(jQuery); 186 187/** 188 * Take over Gravity Forms gformInitSpinner function which allows us to append the spinner after other custom buttons 189 */ 190window.gformOrigInitSpinner = window.gformInitSpinner; 191window.gformInitSpinner = function( formId, spinnerUrl ) { 192 193 if( typeof spinnerUrl == 'undefined' || ! spinnerUrl ) { 194 spinnerUrl = gform.applyFilters( 'gform_spinner_url', gf_global.spinnerUrl, formId ); 195 } 196 197 var $form = jQuery( '#gform_' + formId ); 198 199 $form.submit( function() { 200 if( jQuery( '#gform_ajax_spinner_' + formId ).length == 0 ) { 201 $form.find( '.gform_page_footer' ).append( '<img id="gform_ajax_spinner_' + formId + '" class="gform_ajax_spinner" src="' + spinnerUrl + '" alt="" />' ); 202 } 203 } ); 204 205};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.