File: //var/www/html/wp-content/plugins/jet-engine/assets/lib/jet-plugins/src/main.js
import { createHooks } from '@wordpress/hooks';
class JetPlugins {
hooks;
globalNamespace = 'jet-plugins';
blocksNamespace = 'frontend.element-ready';
blocksConditions = {};
constructor( hooksHandler ) {
this.hooks = hooksHandler || createHooks();
}
hookNameFromBlock( block ) {
const name = this.getBlockName( block );
return name
? `${ this.globalNamespace }.${ this.blocksNamespace }.${ name }`
: '';
}
getBlockName( block ) {
if ( 'string' === typeof block ) {
return block.replace( '/', '.' );
}
return this.getBlockName( block?.dataset?.isBlock || '' );
}
init( $scope, blocks, namespace ) {
namespace = namespace || false;
// Attach blocks callback early if used. Its optional, maybe used to
// make sure handlers attached before hooks called
if ( blocks && blocks.length ) {
this.bulkBlocksInit( blocks );
}
// Init in some scope if needed. By default on body
$scope = $scope || jQuery( 'body' );
if ( $scope && $scope.length ) {
let blockSelector = '[data-is-block*="/"]';
if ( namespace ) {
blockSelector = '[data-is-block*="' + namespace + '/"]';
}
let $blocksList = $scope.find( blockSelector );
$blocksList && $blocksList.length &&
$blocksList.each( ( index, el ) => {
this.initBlock( el );
} );
}
}
/**
* Check if given block requires initializtion
*
* @param DOMNode el Specific node of given block
* @return {Boolean}
*/
isBlockRequiresInit( el ) {
// Intially check if block was already initialized - if yes, we don't
// need do it again
let needInit = undefined === el.dataset.jetInited;
const blockHook = this.getBlockName( el );
// If block was not initialized before - check if it has condition
// callback to allow initializtion or not If it has - allow
// initializtion only if condition callback return TRUE
if ( needInit && this.blocksConditions[ blockHook ] ) {
needInit = this.blocksConditions[ blockHook ]( el );
}
return needInit;
}
initBlock( el, forceInit ) {
forceInit = forceInit || false;
const blockHook = this.hookNameFromBlock( el );
if ( blockHook && this.hasHandlers( blockHook ) ) {
// Initially check if force initialization passed as argument.
// In this case block will be initialized anyway
let needInit = forceInit;
// If force init not required - check if we need to initilize it
if ( !needInit ) {
needInit = this.isBlockRequiresInit( el );
}
if ( needInit ) {
this.hooks.doAction( blockHook, jQuery( el ) );
el.dataset.jetInited = true;
}
}
}
hasHandlers( hookName ) {
if ( !this.hooks.actions[ hookName ] ) {
return false;
}
if ( !this.hooks.actions[ hookName ].handlers ||
!this.hooks.actions[ hookName ].handlers.length ) {
return false;
}
return true;
}
registerBlockHandlers( block ) {
const blockName = this.getBlockName( block.block );
this.hooks.addAction(
this.hookNameFromBlock( blockName ),
`${ this.globalNamespace }/${ block.block }`,
block.callback,
);
if ( block.condition && 'function' === typeof block.condition ) {
this.blocksConditions[ blockName ] = block.condition;
}
}
bulkBlocksInit( blocks ) {
for ( var i = 0; i < blocks.length; i++ ) {
this.registerBlockHandlers( blocks[ i ] );
}
}
}
window.JetPlugins = window.JetPlugins || new JetPlugins();