Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save glaubersilva/9ad52fb81e1e3460f88782ea6700ad89 to your computer and use it in GitHub Desktop.
Save glaubersilva/9ad52fb81e1e3460f88782ea6700ad89 to your computer and use it in GitHub Desktop.
[Forminator] Skip Empty Pages on Pagination Forms
<?php
/**
* Plugin Name: [Forminator] Skip Empty Pages on Pagination Forms
* Plugin URI: https://wpmudev.com/
* Description: If the page is empty, automatically go to the next or previous page.
* Author: Glauber Silva @ WPMUDEV
* Author URI: https://wpmudev.com/
* Task: SLS-2261 and SLS-2500
* License: GPLv2 or later
*
* @package WPMUDEV_Forminator_Skip_Empty_Pages_On_Pagination_Forms
*/
defined( 'ABSPATH' ) || exit;
function wpmudev_forminator_skip_empty_pages() {
ob_start();
?>
<script type="text/javascript">
function readyHandler() {
function isInsideHiddenRow( rows, field ) {
for ( var i = 0, max = rows.length; i < max; i++ ) {
if ( rows[i].contains(field) ) {
return true;
}
}
return false;
}
function isEmptyPage ( page ) {
var HTMLfields = page.querySelectorAll( '.forminator-col:not(.forminator-hidden)' );
if ( HTMLfields && HTMLfields.length > 0 ) {
var hidden_rows = page.querySelectorAll( '.forminator-row.forminator-hidden' );
var filtered_fields = Object.values(HTMLfields);
for ( var i = 0, max = HTMLfields.length; i < max; i++ ) {
if ( isInsideHiddenRow( hidden_rows, HTMLfields[i] ) ) {
filtered_fields = filtered_fields.filter( function(value) {
return value.id != HTMLfields[i].id;
} );
}
}
if ( filtered_fields.length > 0 ) {
return false;
}
}
return true;
}
function maybeNextStep( page ) {
if ( page.style.display != 'none' && isEmptyPage ( page ) ) {
if ( page.classList.contains( 'skip-back' ) ) {
setTimeout( function(){
page.classList.remove('skip-back');
}, 1 );
var btn_back = document.querySelector( '.forminator-button-back' );
if ( typeof( btn_back ) != 'undefined' && btn_back != null ) {
btn_back.click();
}
} else {
setTimeout( function(){
page.classList.add('skip-back');
}, 1 );
var btn_next = document.querySelector( '.forminator-button-next' );
if ( typeof( btn_next ) != 'undefined' && btn_next != null ) {
btn_next.click();
}
}
}
}
function observeThis( page ) {
var observer = new MutationObserver( function( mutations ) {
maybeNextStep( page );
});
var config = {
attributes: true,
attributeFilter: ['style'],
childList: false,
characterData: false
};
observer.observe( page, config );
}
var pages = document.querySelectorAll( '.forminator-pagination--content' );
if ( typeof( pages ) != 'undefined' && pages != null ) {
for ( var i = 0, max = pages.length; i < max; i++ ) {
observeThis(pages[i]);
}
}
}
if ( document.readyState !== 'loading' ) {
readyHandler();
} else {
document.addEventListener( 'DOMContentLoaded', readyHandler );
}
</script>
<?php
$javascript = ob_get_clean();
echo $javascript; // phpcs:ignore
}
add_filter( 'wp_footer', 'wpmudev_forminator_skip_empty_pages', PHP_INT_MAX );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment