File: //var/www/html/triad-infosec/wp-content/themes/Avada/includes/lib/inc/fusion-app/options/toggle.js
/* global FusionApp, fusionAllElements, fusionMailchimpMapOption, fusionHubSpotMapOption, fusionHubSpotConsentMapOption */
var FusionPageBuilder = FusionPageBuilder || {};
FusionPageBuilder.options = FusionPageBuilder.options || {};
FusionPageBuilder.options.fusionToggleField = {
optionToggle: function( context ) {
var $toggle = this.$el.find( '.fusion-builder-option.toggle' ),
self = this;
// Set context to overall view for easier access.
this.context = context;
this.repeaterRowId = 'undefined' === typeof this.repeaterRowId ? 0 : this.repeaterRowId;
if ( $toggle.length ) {
$toggle.each( function() {
self.initToggle( jQuery( this ), context );
} );
}
},
/**
* Init the option.
*
* @since 2.0.0
* @param {Object} $toggle - jQuery object of the DOM element.
* @return {void}
*/
initToggle: function( $toggle ) {
var self = this,
param = $toggle.data( 'option-id' ),
$target = $toggle.find( '.toggle-wrapper' ),
option,
values,
params,
attributes,
fields;
switch ( this.context ) {
case 'TO':
case 'FBE':
option = this.options[ param ];
fields = option.fields;
values = FusionApp.settings;
break;
case 'PO':
option = this.options[ param ];
fields = option.fields;
values = FusionApp.data.postMeta._fusion;
break;
default:
option = fusionAllElements[ this.model.get( 'element_type' ) ].params[ param ];
fields = 'undefined' !== typeof option ? option.fields : {};
attributes = jQuery.extend( true, {}, this.model.attributes );
if ( 'function' === typeof this.filterAttributes ) {
attributes = this.filterAttributes( attributes );
}
params = attributes.params;
values = 'undefined' !== typeof params ? params : '';
break;
}
self.createToggleRow( fields, values, $target, option.row_title );
$toggle.on( 'click', '.toggle-title', function() {
jQuery( this ).parent().find( '.toggle-fields' ).slideToggle( 300 );
if ( jQuery( this ).find( '.toggle-toggle-icon' ).hasClass( 'fusiona-pen' ) ) {
jQuery( this ).find( '.toggle-toggle-icon' ).removeClass( 'fusiona-pen' ).addClass( 'fusiona-minus' );
} else {
jQuery( this ).find( '.toggle-toggle-icon' ).removeClass( 'fusiona-minus' ).addClass( 'fusiona-pen' );
}
} );
$toggle.one( 'click', '.toggle-title', function() {
// Init repeaters if exists.
const $repeater = $toggle.find( '.fusion-builder-option.repeater' );
if ( $repeater.length && !this.repeaterInitialized ) {
jQuery( document ).trigger( 'fusion-init-repeater-in-toggle', { $toggle, option: option.fields } );
this.repeaterInitialized = true;
}
//init mailchimp map inside toggle.
if ( $target.find( '.mailchimp_map' ) ) {
new fusionMailchimpMapOption( $target );
}
//init hubspot map inside toggle.
if ( $target.find( '.hubspot_map' ) ) {
new fusionHubSpotMapOption( $target );
}
//init hubspot map inside toggle.
if ( $target.find( '.hubspot_consent_map' ) ) {
new fusionHubSpotConsentMapOption( $target );
}
} );
},
/**
* Creates a new row for a specific repeater.
*
* @since 2.0.0
* @param {Object} fields - The fields.
* @param {Object} values - The values.
* @param {Object} $target - jQuery element.
* @param {string} rowTitle - The title for this row.
* @return {void}
*/
createToggleRow: function( fields, values, $target, rowTitle ) {
var self = this,
$html = '',
attributes = {},
repeater = FusionPageBuilder.template( jQuery( '#fusion-app-repeater-fields' ).html() ),
depFields = {},
value,
optionId;
rowTitle = 'undefined' !== typeof rowTitle && rowTitle ? rowTitle : 'Toggle Row';
$html += '<div class="toggle-row">';
$html += '<div class="toggle-title">';
$html += '<span class="toggle-toggle-icon fusiona-pen"></span>';
$html += '<h3>' + rowTitle + '</h3>';
$html += '<span></span>';
$html += '</div>';
$html += '<ul class="toggle-fields" style="display:none;">';
this.repeaterRowId++;
_.each( fields, function( field ) {
optionId = 'builder' === self.context ? field.param_name : field.id;
value = values[ optionId ];
depFields[ optionId ] = field;
attributes = {
field: field,
value: value,
context: self.context,
rowId: self.repeaterRowId
};
$html += jQuery( repeater( attributes ) ).html();
} );
$html += '</ul>';
$html += '</div>';
$target.append( $html );
if ( 'function' === typeof this.initOptions ) {
this.initOptions( $target.children( 'div:last-child' ) );
}
// Check option dependencies
if ( 'TO' !== this.context && 'FBE' !== this.context && 'PO' !== this.context && 'undefined' !== typeof this.model && 'undefined' !== typeof this.model.get ) {
new FusionPageBuilder.Dependencies( fusionAllElements[ this.model.get( 'element_type' ) ].params, this, $target.children( 'div:last-child' ), depFields, this.$el );
} else {
new FusionPageBuilder.Dependencies( {}, this, $target.children( 'div:last-child' ), depFields, this.$el );
}
}
};