// jQuery(document).ready( function() { document.addEventListener( \'DOMContentLoaded\', function() { \'use strict\';
/* global jQuery:{} */ /* global td_ajax_url, td_res_context_registered_atts */
const tdFooterWrap = jQuery(\'.td-footer-wrap\'); const tdPostID = \'3790\';
// on ui_delayed_load event tdFooterWrap.on( \'ui_delayed_load\', function () {
jQuery.ajax({ type: \'POST\', url: td_ajax_url, data: { action: \'tdb_get_footer\', postID: tdPostID, td_res_context_registered_atts: td_res_context_registered_atts }, success: function( data, textStatus, XMLHttpRequest ) {
// console.groupCollapsed(\'%c footerLoadContent/tdb_get_footer: success\', \'color: mediumseagreen;\' ); // console.log( \'Post: \', { postId: tdPostID } ); // console.log( \'Reply: \', data ); // console.groupEnd();
// decode data var decodedData = jQuery.parseJSON(data);
// process data content if ( \'undefined\' !== typeof decodedData.content ) { jQuery(decodedData.content).appendTo(tdFooterWrap);
// add custom classes if ( \'undefined\' !== typeof decodedData.classes ) { tdFooterWrap.addClass(decodedData.classes); }
// reinit lazy load if ( ( \'undefined\' !== typeof window.tdAnimationStack ) && ( true === window.tdAnimationStack.activated ) ) { window.tdAnimationStack.reinit(); }
}
}, error: function( MLHttpRequest, textStatus, errorThrown ) { // console.group(\'%c footerLoadContent/tdb_get_footer: error\', \'color: orangered;\' ); // console.log( \'Post: \', { postId: tdPostID, } ); // console.log( \'Error data: \', { // errorThrown: errorThrown, // textStatus: textStatus, // status: MLHttpRequest.status !== undefined ? MLHttpRequest.status : \'\', // MLHttpRequest: MLHttpRequest, // }); // console.groupEnd(); } });
});
// ui events const uiEvents = [ \'mouseover\', \'click\', \'keydown\', \'wheel\', \"touchmove\", \"touchstart\", ];
// ui events handler function uiEventsHandler(e) {
// console.log( \'%c delayed footer load\', \'color: white; background-color: #7ad03a\' ); // console.log( \'event type:\', e.type );
// trigger delayed footer loading tdFooterWrap.trigger(\'ui_delayed_load\');
// remove ui_events uiEvents.forEach( e => { //console.log( \'removeEventListener:\', e ); window.removeEventListener( e, uiEventsHandler ); });
}
// utility function to check if an element is in viewport function isElementInViewport(el) {
var rect = el.getBoundingClientRect();
// var header_menu_affix = jQuery(\'.td-header-menu-wrap.td-affix\'), // header_menu_affix_height = header_menu_affix.length ? header_menu_affix.outerHeight() : 0;
// var admin_bar = jQuery(\'#wpadminbar\'), // admin_bar_height = admin_bar.length ? admin_bar.outerHeight() : 0;
// var setTop = tdFooterWrap.offset().top/* - ( header_menu_affix_height + admin_bar_height )*/, // setHeight = tdFooterWrap.outerHeight(true), // setBottom = setTop + setHeight; // set the bottom by adding its height to the scroll position of its top
// var win = jQuery(window), // windowTop = win.scrollTop(), // windowBottom = windowTop + win.height();
/* rest */ // console.log( \'rect\', rect ); // console.log( \'rect:top\', rect.top ); // console.log( \'rect:bottom\', rect.bottom ); // console.log( \'window.innerHeight\', window.innerHeight );
/* element */ // console.log( \'top\', setTop ); // console.log( \'height\', setHeight ); // console.log( \'bottom\', setBottom );
/* window */ // console.log( \'window top\', windowTop ); // console.log( \'window bottom\', windowBottom );
return ( rect.bottom >= 0 && rect.top <= ( window.innerHeight || document.documentElement.clientHeight ) ); } // check if footer element is in viewport function checkFooterVisibility() { if ( isElementInViewport(tdFooterWrap[0]) ) { //console.log(\'footer el is in the viewport!\'); // trigger delayed footer loading tdFooterWrap.trigger(\'ui_delayed_load\'); } else { // console.log(\'footer el is NOT in the viewport!\'); // add ui events uiEvents.forEach( e => { //console.log( \'footer ui delayed load addEventListener: \', e ); window.addEventListener( e, uiEventsHandler, { passive: true } ); });
}
}
// initial load, check footer visibility after a short delay setTimeout( checkFooterVisibility, 100 );
});