Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wpmudev-sls/84abfd95ea5f94426e05115d02a60c43 to your computer and use it in GitHub Desktop.
Save wpmudev-sls/84abfd95ea5f94426e05115d02a60c43 to your computer and use it in GitHub Desktop.
[Forminator] - Pagination skip empty pages
<?php
/**
* Plugin Name: [Forminator] - Pagination skip empty pages
* Plugin URI: https://premium.wpmudev.org
* Description: A custom snippet that allows skipping empty pages when Pagination is used.
* Task: SLS-2198
* Author: Panos Lyrakis @ WPMUDEV
* Author URI: https://premium.wpmudev.org
* License: GPLv2 or later
*/
if ( ! defined( 'ABSPATH' ) || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
return;
}
add_action(
'wp_footer',
function() {
if ( ! is_singular() || ! has_shortcode( get_the_content(), 'forminator_form' ) ) {
return;
}
?>
<script type="text/javascript">
( ($,d)=>{
if ( window.wpmudev_forminator_skip_empty_pages ) {
return;
}
window.wpmudev_forminator_skip_empty_pages = {
init: function() {
var _self = window.wpmudev_forminator_skip_empty_pages;
$(d).ajaxComplete( function( event, xhr, settings ) {
let _self = window.wpmudev_forminator_skip_empty_pages,
response_text = JSON.parse( xhr.responseText ),
response_action = _self.get_query_var( 'action', unescape( settings.data ) );
if ( response_action === 'forminator_load_cform' ) {
//_self.monitor_forms();
setTimeout(function() {
_self.monitor_forms();
}, 300);
}
});
//_self.monitor_forms();
setTimeout(function() {
_self.monitor_forms();
}, 300);
},
monitor_forms: function() {
let _self = window.wpmudev_forminator_skip_empty_pages,
forms = $( '.forminator-custom-form' );
// if has pagination, move button to the footer pagination.
forms.each( function(){
let form = $( this ),
form_id = form.attr( 'id' ),
buttons = document.querySelectorAll( `#${form_id} .forminator-button` );
d.addEventListener('click', function ( event ) {
if ( ! event.target.matches( `#${form_id} .forminator-button` ) ) {
return;
}
_self.maybe_skip_page( event );
});
});
},
maybe_skip_page: function( event ) {
let _self = window.wpmudev_forminator_skip_empty_pages,
element = event.target, // Button clicked.
form = element.closest( 'form' ),
form_id = form.getAttribute( 'id' ),
form_id_num = Number.parseInt( form_id.split( 'forminator-module-' )[1] ),
is_next_button = element.classList.contains( 'forminator-button-next' ) ? true : false,
current_page_id = form.querySelector( '.forminator-pagination:not([style*="visibility:hidden"]):not([style*="visibility: hidden"])' )['id'],
current_page_mumber = current_page_id.split( `forminator-custom-form-${form_id_num}--page-` )[1],
current_page = form.querySelector( `#${current_page_id}` ),
next_page_number = is_next_button ? Number.parseInt( current_page_mumber, 10 ) + 1 : Number.parseInt( current_page_mumber, 10 ) - 1,
next_page_id = `forminator-custom-form-${form_id_num}--page-${next_page_number}`;
// Check if all rows are hidden and if so trigger click again.
if ( null == current_page.querySelector( '.forminator-pagination--content > .forminator-row:not(.forminator-hidden)' ) ) {
_self.simulateClick( element );
}
},
simulateClick: function( elem ){
var evt = new MouseEvent('click', {
bubbles: true,
cancelable: true,
view: window
});
// If cancelled, don't dispatch our event
var canceled = !elem.dispatchEvent(evt);
},
get_query_var: function( name, url ) {
if ( ! url ) {
return false;
}
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp(name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return false;
if (!results[2]) return false;
return decodeURIComponent( results[2].replace(/\+/g, " ") );
}
}
$(d).ready( function(){
wpmudev_forminator_skip_empty_pages.init();
} );
})(jQuery,document);
</script>
<?php
},
99999
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment