/* global fusionBuilderGetContent, FusionPageBuilderApp, tinymce, fusionBuilderConfig, fusionHistoryManager, tinyMCE, unescape, fusionAllElements, FusionPageBuilderElements, confirm, fusionBuilderText, alert, FusionPageBuilderViewManager, console, fusionMultiElements, fusionBuilderStickyHeader, openShortcodeGenerator, Fuse, fusionIconSearch, awbUpdatePOPanel */
/* eslint no-bitwise: 0 */
/* eslint no-redeclare: 0 */
/* eslint no-alert: 0 */
/* eslint no-undef: 0 */
/* eslint no-mixed-operators: 0 */
/* eslint no-useless-escape: 0 */
/* eslint no-unused-vars: 0 */
/* eslint no-shadow: 0 */
/* eslint array-callback-return: 0 */
/* eslint no-throw-literal: 0 */
/* eslint max-depth: 0 */
/* eslint no-multi-assign: 0 */
/* eslint guard-for-in: 0 */
/* eslint no-native-reassign: 0 */
/* eslint no-continue: 0 */
/* eslint no-global-assign: 0 */
var FusionPageBuilder = FusionPageBuilder || {};
// Events
var FusionPageBuilderEvents = _.extend( {}, Backbone.Events );
( function( $ ) {
var FusionDelay;
$.fn.outerHTML = function() {
return ( ! this.length ) ? this : ( this[ 0 ].outerHTML || ( function( el ) {
var div = document.createElement( 'div' ),
contents;
div.appendChild( el.cloneNode( true ) );
contents = div.innerHTML;
div = null;
return contents;
}( this[ 0 ] ) ) );
};
window.fusionBuilderGetContent = function( textareaID, removeAutoP, initialLoad ) { // jshint ignore:line
var content;
if ( 'undefined' === typeof removeAutoP ) {
removeAutoP = false;
}
if ( 'undefined' === typeof initialLoad ) {
initialLoad = false;
}
if ( ! initialLoad && 'undefined' !== typeof window.tinyMCE && window.tinyMCE.get( textareaID ) && ! window.tinyMCE.get( textareaID ).isHidden() ) {
content = window.tinyMCE.get( textareaID ).getContent();
} else if ( $( '#' + textareaID ).length ) {
content = $( '#' + textareaID ).val().replace( /\r?\n/g, '\r\n' );
}
// Remove auto p tags from content.
if ( removeAutoP && 'undefined' !== typeof window.tinyMCE && 'undefined' !== typeof content ) {
content = content.replace( /
\[/g, '[' );
content = content.replace( /\]<\/p>/g, ']' );
}
if ( 'undefined' !== typeof content ) {
return content.trim();
}
};
// Delay
FusionDelay = ( function() {
var timer = 0;
return function( callback, ms ) {
clearTimeout( timer );
timer = setTimeout( callback, ms );
};
}() );
$( window ).on( 'load', function() {
if ( $( '#fusion_toggle_builder' ).data( 'enabled' ) ) {
$( '#fusion_toggle_builder' ).trigger( 'click' );
}
} );
$( '#publishing-action #publish' ).on( 'click', function() {
FusionPageBuilderApp.saveGlobal = false;
} );
$( window ).on( 'beforeunload', function() {
var editor = 'undefined' !== typeof tinymce && tinymce.get( 'content' );
if ( ( ( editor && ! editor.isHidden() && editor.isDirty() ) || ( wp.autosave && wp.autosave.server.postChanged() ) ) && ( true === FusionPageBuilderApp.saveGlobal && ! $( '#publish' ).hasClass( 'disable' ) ) ) {
FusionPageBuilderApp.saveGlobal = false;
return '';
}
} );
$( document ).ready( function() {
var $selectedDemo,
$useBuilderMetaField,
$toggleBuilderButton,
$builder,
$mainEditorWrapper,
$container;
// Column sizes dialog. Close on outside click.
$( document ).click( function( e ) {
if ( $( e.target ).parent( '.column-sizes' ).length || $( e.target ).hasClass( 'fusion-builder-resize-column' ) || $( e.target ).parent( '.fusion-builder-resize-column' ).length ) {
// Column sizes dialog clicked.
} else {
$( '.column-sizes' ).hide();
}
} );
// Avada Builder App View
FusionPageBuilder.AppView = window.wp.Backbone.View.extend( {
mediaImportKeys: [],
el: $( '#fusion_builder_main_container' ),
template: FusionPageBuilder.template( $( '#fusion-builder-app-template' ).html() ),
events: {
'click .fusion-builder-layout-button-save': 'saveLayout',
'click .fusion-builder-layout-button-load': 'loadLayout',
'click .fusion-builder-layout-button-delete': 'deleteLayout',
'click .fusion-builder-layout-buttons-clear': 'clearLayout',
'click .fusion-builder-demo-button-load': 'loadDemoPage',
'click .fusion-builder-layout-code-fields': 'toggleCodeFields',
'click .fusion-builder-layout-custom-css': 'customCSS',
'click .fusion-builder-template-buttons-save': 'saveTemplateDialog',
'click #fusion-builder-layouts .fusion-builder-modal-close': 'hideLibrary',
'click .fusion-builder-library-dialog': 'openLibrary',
'mouseenter .fusion-builder-layout-buttons-history': 'showHistoryDialog',
'mouseleave .fusion-builder-layout-buttons-history': 'hideHistoryDialog',
'click .fusion-builder-element-button-save': 'saveElement',
'click #fusion-load-template-dialog': 'loadPreBuiltPage',
'click #fusion-load-studio-dialog': 'loadSutdioPage',
'click .fusion-builder-layout-buttons-toggle-containers': 'toggleAllContainers',
'click .fusion-builder-global-tooltip': 'unglobalize',
'click .fusion-builder-publish-tooltip': 'publish',
'click .awb-import-options-toggle': 'toggleImportOptions',
'click .awb-import-studio-item': 'loadStudioLayout',
contextmenu: 'contextMenu'
},
initialize: function() {
this.builderActive = false;
this.pauseBuilder = false;
this.ajaxurl = fusionBuilderConfig.ajaxurl;
this.fusion_load_nonce = fusionBuilderConfig.fusion_load_nonce;
this.fusion_builder_plugin_dir = fusionBuilderConfig.fusion_builder_plugin_dir;
this.layoutIsLoading = false;
this.layoutIsSaving = false;
this.saveGlobal = false;
this.layoutIsDeleting = false;
this.parentRowId = '';
this.parentColumnId = '';
this.targetContainerCID = '';
this.activeModal = '';
this.innerColumn = '';
this.blankPage = '';
this.newLayoutLoaded = false;
this.newContainerAdded = false;
this.fullWidth = fusionBuilderConfig.full_width;
this.allContent = '';
// Shortcode Generator
this.shortcodeGenerator = '';
this.shortcodeGeneratorMultiElement = '';
this.shortcodeGeneratorMultiElementChild = '';
this.allowShortcodeGenerator = '';
this.shortcodeGeneratorActiveEditor = '';
this.shortcodeGeneratorEditorID = '';
this.manuallyAdded = false;
this.manualGenerator = false;
this.manualEditor = '';
this.fromExcerpt = false;
// Code Block encoding
this.disable_encoding = fusionBuilderConfig.disable_encoding;
this._keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
this.codeEditor = '';
this.MultiElementChildSettings = false;
// Listen for new elements
this.listenTo( this.collection, 'add', this.addBuilderElement );
// Convert builder layout to shortcodes
this.listenTo( FusionPageBuilderEvents, 'fusion-element-added', this.builderToShortcodes );
this.listenTo( FusionPageBuilderEvents, 'fusion-element-removed', this.builderToShortcodes );
this.listenTo( FusionPageBuilderEvents, 'fusion-element-cloned', this.builderToShortcodes );
this.listenTo( FusionPageBuilderEvents, 'fusion-element-edited', this.builderToShortcodes );
this.listenTo( FusionPageBuilderEvents, 'fusion-element-sorted', this.builderToShortcodes );
// Sync global layouts.
this.listenTo( FusionPageBuilderEvents, 'fusion-element-added', this.syncGlobalLayouts );
this.listenTo( FusionPageBuilderEvents, 'fusion-element-cloned', this.syncGlobalLayouts );
this.listenTo( FusionPageBuilderEvents, 'fusion-element-edited', this.syncGlobalLayouts );
this.listenTo( FusionPageBuilderEvents, 'fusion-element-sorted', this.syncGlobalLayouts );
// Loader animation
this.listenTo( FusionPageBuilderEvents, 'fusion-show-loader', this.showLoader );
this.listenTo( FusionPageBuilderEvents, 'fusion-hide-loader', this.hideLoader );
// Hide library
this.listenTo( FusionPageBuilderEvents, 'fusion-hide-library', this.hideLibrary );
// Save layout template on return key
this.listenTo( FusionPageBuilderEvents, 'fusion-save-layout', this.saveLayout );
// Save history state
this.listenTo( FusionPageBuilderEvents, 'fusion-save-history-state', this.saveHistoryState );
// Toggled Containers
this.toggledContainers = true;
// for HTML decoding.
this.dummyTextArea = document.createElement( 'textarea' );
this.render();
this.codeFields();
if ( ! jQuery( 'body' ).hasClass( 'gutenberg-editor-page' ) ) {
if ( $( '#fusion_toggle_builder' ).hasClass( 'fusion_builder_is_active' ) ) {
// Create builder layout on initial load.
this.initialBuilderLayout( true );
}
// Turn on history tracking. Capture editor. Save initial history state.
fusionHistoryManager.turnOnTracking();
fusionHistoryManager.captureEditor();
fusionHistoryManager.turnOffTracking();
}
// Context menu.
this.contextMenuView = false;
this.clipboard = {};
// Dynamic Values Model.
this.dynamicValues = new FusionPageBuilder.DynamicValues();
if ( 'object' === typeof fusionDynamicData ) {
this.dynamicValues.addData( null, fusionDynamicData.dynamicOptions );
}
// Studio Model.
this.studio = new FusionPageBuilder.Studio();
// Website Model.
this.website = new FusionPageBuilder.Website();
// Simplified element map.
this.simplifiedMap = [];
// Media map.
this.mediaMap = {
images: {},
menus: {},
forms: {},
post_cards: {},
videos: {},
icons: {},
off_canvases: {}
};
// Settings to params map for form only.
if ( jQuery( '#pyre_fusion_form' ).length ) {
this.createSettingsToParams();
}
},
render: function() {
this.$el.html( this.template() );
this.sortableContainers();
return this;
},
/**
* Maps settings to settingsToParams.
*
* @since 2.0.0
* @return {void}
*/
createSettingsToParams: function() {
var self = this,
paramObj;
_.each( fusionAllElements, function( element, elementID ) {
if ( ! _.isUndefined( element.settings_to_params ) ) {
_.each( element.settings_to_params, function( param, setting ) {
param = _.isObject( param ) && ! _.isUndefined( param.param ) ? param.param : param;
// We don't have this in PO, no need to listen.
if ( jQuery( '[name="_fusion[' + setting + ']"]' ).length ) {
jQuery( '[name="_fusion[' + setting + ']"]' ).on( 'change fusion-changed', function() {
var value = jQuery( this ).val() && '' !== jQuery( this ).val() ? jQuery( this ).val() : jQuery( this ).closest( '.pyre_metabox_field' ).find( '[data-default]' ).attr( 'data-default' );
self.defaultChanged( elementID, param, value );
} );
}
} );
}
} );
},
/**
* A PO which is used as a default has changed.
*
* @since 2.0.0
* @return {void}
*/
defaultChanged: function( elementType, param, value ) {
var oldDefault = fusionAllElements[ elementType ].params[ param ][ 'default' ];
if ( 'object' !== typeof fusionAllElements[ elementType ] ) {
return;
}
fusionAllElements[ elementType ].params[ param ][ 'default' ] = value;
if ( 'string' === typeof fusionAllElements[ elementType ].params[ param ].description ) {
fusionAllElements[ elementType ].params[ param ].description = fusionAllElements[ elementType ].params[ param ].description.replace( '>' + oldDefault, '>' + value );
}
},
unglobalize: function( event ) {
var cid = jQuery( event.currentTarget ).data( 'cid' ),
view = FusionPageBuilderViewManager.getView( cid ),
params = view.model.get( 'params' ),
type = view.model.get( 'element_type' ),
r;
r = confirm( fusionBuilderText.are_you_sure_you_want_to_remove_global );
if ( false === r ) {
return false;
}
// Remove global attributes
delete params.fusion_global;
view.model.set( 'params', params );
view.$el.removeClass( 'fusion-global-element fusion-global-container fusion-global-column' );
jQuery( event.currentTarget ).remove();
view.$el.removeAttr( 'fusion-global-layout' );
if ( 'fusion_builder_container' === type ) {
view.$el.find( '.fusion-builder-container-content > .fusion-builder-section-content' ).removeAttr( 'fusion-global-layout' );
}
fusionHistoryManager.turnOnTracking();
fusionHistoryState = fusionBuilderText.removed_global;
FusionPageBuilderEvents.trigger( 'fusion-element-edited' );
},
publish: function( event ) {
var cid = jQuery( event.currentTarget ).data( 'cid' ),
view = FusionPageBuilderViewManager.getView( cid ),
params = view.model.get( 'params' ),
r;
r = confirm( fusionBuilderText.are_you_sure_you_want_to_publish );
if ( false === r ) {
return false;
}
params.status = 'published';
view.model.set( 'params', params );
view.updateStatusIcons();
fusionHistoryManager.turnOnTracking();
fusionHistoryState = fusionBuilderText.container_published; // jshint ignore:line
FusionPageBuilderEvents.trigger( 'fusion-element-edited' );
},
isTinyMceActive: function() {
var isActive = ( 'undefined' !== typeof tinyMCE ) && tinyMCE.activeEditor && ! tinyMCE.activeEditor.isHidden();
return isActive;
},
base64Encode: function( data ) {
var b64 = this._keyStr,
o1,
o2,
o3,
h1,
h2,
h3,
h4,
bits,
i = 0,
ac = 0,
enc = '',
tmpArr = [],
r;
if ( ! data ) {
return data;
}
try {
data = unescape( encodeURIComponent( data ) );
} catch ( e ) {
data = unescape( data );
}
do {
// Pack three octets into four hexets
o1 = data.charCodeAt( i++ );
o2 = data.charCodeAt( i++ );
o3 = data.charCodeAt( i++ );
bits = o1 << 16 | o2 << 8 | o3;
h1 = bits >> 18 & 0x3f;
h2 = bits >> 12 & 0x3f;
h3 = bits >> 6 & 0x3f;
h4 = bits & 0x3f;
// Use hexets to index into b64, and append result to encoded string.
tmpArr[ ac++ ] = b64.charAt( h1 ) + b64.charAt( h2 ) + b64.charAt( h3 ) + b64.charAt( h4 );
} while ( i < data.length );
enc = tmpArr.join( '' );
r = data.length % 3;
return ( r ? enc.slice( 0, r - 3 ) : enc ) + '==='.slice( r || 3 );
},
base64Decode: function( input ) {
var output = '',
chr1,
chr2,
chr3,
enc1,
enc2,
enc3,
enc4,
i = 0;
input = input.replace( /[^A-Za-z0-9\+\/\=]/g, '' );
while ( i < input.length ) {
enc1 = this._keyStr.indexOf( input.charAt( i++ ) );
enc2 = this._keyStr.indexOf( input.charAt( i++ ) );
enc3 = this._keyStr.indexOf( input.charAt( i++ ) );
enc4 = this._keyStr.indexOf( input.charAt( i++ ) );
chr1 = ( enc1 << 2 ) | ( enc2 >> 4 );
chr2 = ( ( enc2 & 15 ) << 4 ) | ( enc3 >> 2 );
chr3 = ( ( enc3 & 3 ) << 6 ) | enc4;
output = output + String.fromCharCode( chr1 );
if ( 64 !== enc3 ) {
output = output + String.fromCharCode( chr2 );
}
if ( 64 !== enc4 ) {
output = output + String.fromCharCode( chr3 );
}
}
output = this.utf8Decode( output );
return output;
},
utf8Decode: function( utftext ) {
var string = '',
i = 0,
c = 0,
c1 = 0,
c2 = 0,
c3;
while ( i < utftext.length ) {
c = utftext.charCodeAt( i );
if ( 128 > c ) {
string += String.fromCharCode( c );
i++;
} else if ( ( 191 < c ) && ( 224 > c ) ) {
c2 = utftext.charCodeAt( i + 1 );
string += String.fromCharCode( ( ( c & 31 ) << 6 ) | ( c2 & 63 ) );
i += 2;
} else {
c2 = utftext.charCodeAt( i + 1 );
c3 = utftext.charCodeAt( i + 2 );
string += String.fromCharCode( ( ( c & 15 ) << 12 ) | ( ( c2 & 63 ) << 6 ) | ( c3 & 63 ) );
i += 3;
}
}
return string;
},
/**
* Decodes headings if encoded.
*
* @since 3.11.0
* @param {string} html - The data to decode.
* @return {string}
*/
maybeDecode: function( text ) {
if ( ! this.needsDecoding( text ) ) {
return text;
}
this.dummyTextArea.innerHTML = text;
if ( '' !== this.dummyTextArea.value ) {
return this.dummyTextArea.value;
}
return text;
},
/**
* Checks if encoded.
*
* @since 3.11.0
* @param {string} html - The data to decode.
* @return {string}
*/
needsDecoding( text ) {
const entityPattern = /&[#A-Za-z0-9]+;/;
return entityPattern.test( text );
},
fusionBuilderMCEremoveEditor: function( id ) {
if ( 'undefined' !== typeof window.tinyMCE ) {
window.tinyMCE.execCommand( 'mceRemoveEditor', false, id );
if ( 'undefined' !== typeof window.tinyMCE.get( id ) ) {
window.tinyMCE.remove( '#' + id );
}
}
},
fusion_builder_sortable: function( $element ) {
var $sortable;
$sortable = $element.find( '.fusion-sortable-options' );
$sortable.each( function() {
jQuery( this ).sortable();
jQuery( this ).on( 'sortupdate', function( event ) {
var sortContainer = jQuery( event.target ),
sortOrder = '';
sortContainer.children( '.fusion-sortable-option' ).each( function() {
sortOrder += jQuery( this ).data( 'value' ) + ',';
} );
sortOrder = sortOrder.slice( 0, -1 );
sortContainer.siblings( '.sort-order' ).val( sortOrder ).trigger( 'change' );
} );
} );
},
fusion_builder_connected_sortable: function( $element ) {
var self = this,
$sortable = $element.find( '.fusion-connected-sortable' );
$sortable.sortable( {
connectWith: '.fusion-connected-sortable',
stop: function() {
self.updateConnectedSortables( $element );
}
} ).disableSelection();
$sortable.find( 'li' ).on( 'dblclick', function() {
if ( jQuery( this ).parent().hasClass( 'fusion-connected-sortable-enabled' ) ) {
$element.find( '.fusion-connected-sortable-disabled' ).prepend( this );
} else {
$element.find( '.fusion-connected-sortable-enabled' ).append( this );
}
self.updateConnectedSortables( $element );
} );
},
updateConnectedSortables: function( $element ) {
var $enabled = $element.find( '.fusion-connected-sortable-enabled' ),
$container = $element.find( '.fusion-builder-option-container' ),
sortOrder = '';
$enabled.children( '.fusion-connected-sortable-option' ).each( function() {
sortOrder += jQuery( this ).data( 'value' ) + ',';
} );
$container.find( '.fusion-connected-sortable' ).each( function() {
if ( jQuery( this ).find( 'li' ).length ) {
jQuery( this ).removeClass( 'empty' );
} else {
jQuery( this ).addClass( 'empty' );
}
} );
sortOrder = sortOrder.slice( 0, -1 );
$container.find( '.sort-order' ).val( sortOrder ).trigger( 'change' );
},
fusion_builder_sortable_text: function( $element ) {
var $sortable;
$sortable = $element.find( '.fusion-sortable-text-options' );
$sortable.each( function() {
var $sort = jQuery( this );
$sort.sortable( {
handle: '.fusion-sortable-move'
} );
$sort.on( 'sortupdate', function( event ) {
var sortContainer = jQuery( event.target ),
sortOrder = '';
sortContainer.children( '.fusion-sortable-option' ).each( function() {
sortOrder += jQuery( this ).find( 'input' ).val() + '|';
} );
sortOrder = sortOrder.slice( 0, -1 );
sortContainer.siblings( '.sort-order' ).val( sortOrder ).trigger( 'change' );
} );
$sort.on( 'click', '.fusion-sortable-remove', function( event ) {
event.preventDefault();
jQuery( event.target ).closest( '.fusion-sortable-option' ).remove();
$sort.trigger( 'sortupdate' );
} );
$sort.on( 'change keyup', 'input', function() {
$sort.trigger( 'sortupdate' );
} );
$sort.prev( '.fusion-builder-add-sortable-child' ).on( 'click', function( event ) {
var $newItem = $sort.next( '.fusion-placeholder-example' ).clone( true );
event.preventDefault();
$newItem.removeClass( 'fusion-placeholder-example' ).removeAttr( 'style' ).appendTo( $sort );
setTimeout( function() {
$sort.find( '.fusion-sortable-option:last-child input' ).focus();
}, 100 );
$sort.trigger( 'sortupdate' );
} );
} );
},
fusion_builder_form_options: function( $element ) {
var $valuesToggle = $element.find( '#form-options-settings' ),
$optionsGrid = $element.find( '.options-grid' ),
$addBtn = $element.find( '.fusion-builder-add-sortable-child' ),
$formOptions = $optionsGrid.find( '.fusion-form-options' ),
$template = jQuery( '
' + $element.find( '.fusion-form-option-template' ).html() + '' ),
$values = $optionsGrid.find( '.option-values' ),
$bulkAdd = $element.find( '.bulk-add-modal' ),
allowMultiple = 'yes' === $optionsGrid.data( 'multiple' ),
updateValues;
updateValues = function() {
var options = [];
$formOptions.children( 'li' ).each( function() {
var option = [],
isChecked = jQuery( this ).find( '.fusiona-check_circle' ).length;
option.push( isChecked ? 1 : 0 );
jQuery( this ).find( 'input' ).each( function() {
option.push( this.value );
} );
options.push( option );
} );
$values.val( FusionPageBuilderApp.base64Encode( JSON.stringify( options ) ) );
};
// Init sortable
$formOptions.sortable( {
handle: '.fusion-sortable-move'
} );
// Bindings
$formOptions.on( 'sortupdate', function() {
updateValues();
} );
$formOptions.on( 'change keyup', 'input', function( event ) {
event.preventDefault();
updateValues();
} );
$valuesToggle.on( 'click', function( event ) {
$optionsGrid.toggleClass( 'show-values' );
} );
$formOptions.on( 'click', '.fusion-sortable-remove', function( event ) {
event.preventDefault();
jQuery( event.target ).closest( '.fusion-form-option' ).remove();
updateValues();
} );
$formOptions.on( 'click', '.fusion-sortable-check', function( event ) {
var $el = jQuery( this ).find( '.fusiona-check_circle_outline' ),
isChecked = $el.hasClass( 'fusiona-check_circle' );
event.preventDefault();
if ( ! allowMultiple ) {
$formOptions.find( '.fusion-sortable-check .fusiona-check_circle' ).removeClass( 'fusiona-check_circle' );
}
if ( isChecked ) {
$el.removeClass( 'fusiona-check_circle' );
} else {
$el.addClass( 'fusiona-check_circle' );
}
updateValues();
} );
$addBtn.on( 'click', function( event ) {
var $newEl = $template.clone( true );
event.preventDefault();
$formOptions.append( $newEl );
setTimeout( function () {
$newEl.find( '.form-option-label input' ).focus();
}, 100 );
} );
$bulkAdd.on( 'click', function( event ) {
var modalView;
event.preventDefault();
if ( jQuery( '.fusion-builder-settings-bulk-dialog' ).length ) {
return;
}
modalView = new FusionPageBuilder.BulkAddView( {
choices: fusionBuilderConfig.predefined_choices
} );
jQuery( modalView.render().el ).dialog( {
title: 'Bulk Add / Predefined Choices',
dialogClass: 'fusion-builder-settings-bulk-dialog',
resizable: false,
width: 500,
draggable: false,
buttons: [
{
text: 'Cancel',
click: function() {
jQuery( this ).dialog( 'close' );
}
},
{
text: 'Insert Choices',
click: function() {
var choices = modalView.getChoices(),
$newEl;
event.preventDefault();
_.each( choices, function( choice ) {
$newEl = $template.clone( true );
if ( choice.includes( '|' ) ) {
choice = choice.split( '|' );
$newEl.find( 'input.label' ).val( choice[ 0 ] );
$newEl.find( 'input.value' ).val( choice[ 1 ] );
$valuesToggle.prop( 'checked', true );
$optionsGrid.addClass( 'show-values' );
} else {
$newEl.find( 'input.label' ).val( choice );
}
$formOptions.append( $newEl );
} );
updateValues();
jQuery( this ).dialog( 'close' );
},
class: 'ui-button-blue'
}
],
open: function() {
jQuery( '.fusion-builder-modal-settings-container' ).css( 'z-index', 9998 );
},
beforeClose: function() {
jQuery( '.fusion-builder-modal-settings-container' ).css( 'z-index', 99999 );
jQuery( this ).remove();
}
} );
} );
},
fusion_builder_logics: function( $element ) {
var $optionsGrid = $element.find( '.options-grid' ),
$addBtn = $element.find( '.fusion-builder-add-sortable-child' ),
$fusionLogics = $optionsGrid.find( '.fusion-logics' ),
$template = jQuery( '' + $element.find( '.fusion-logic-template' ).html() + '' ),
$values = $optionsGrid.find( '.logic-values' ),
updateValues;
updateValues = function () {
var options = [];
$fusionLogics.children( 'li' ).each( function () {
var option = {},
operator = jQuery( this ).find( '.fusion-sortable-operator' ),
self = jQuery( this );
// operator.
option.operator = operator.hasClass( 'and' ) ? 'and' : 'or';
// comparison.
option.comparison = jQuery( this ).find( '.logic-comparison-selection' ).val();
// field.
option.field = jQuery( this ).find( 'select.fusion-logic-choices' ).val();
// desired value.
option.value = jQuery( this ).find( '.fusion-logic-option' ).val();
// additinals.
if ( jQuery( this ).find( '.logic-additionals' ).length ) {
option.additionals = jQuery( this ).find( '.fusion-logic-additionals-field' ).val();
}
options.push( option );
} );
$values
.val( FusionPageBuilderApp.base64Encode( JSON.stringify( options ) ) )
.trigger( 'change' );
};
// Init sortable
$fusionLogics.sortable( {
items: '.fusion-logic',
tolerance: 'pointer',
cursor: 'move',
connectWith: '.fusion-logics',
handle: '.fusion-logic-controller-head',
axis: 'y'
} );
// Bindings
$fusionLogics.on( 'sortupdate', function () {
updateValues();
} );
$fusionLogics.on( 'change keyup', 'input', function ( event ) {
event.preventDefault();
updateValues();
} );
$fusionLogics.on( 'change', 'select.fusion-logic-option', function( event ) {
event.preventDefault();
updateValues();
} );
$fusionLogics.on( 'change', 'select.fusion-logic-choices', function( event ) {
var allChoices = $fusionLogics.closest( '.fusion-builder-option-logics' ).find( '.fusion-logics-all-choices' ).text(),
selection = jQuery( this ).val(),
selectionText = jQuery( this ).closest( 'select' ).find( 'option:selected' ).text(),
$wrapper = jQuery( this ).closest( '.fusion-logic' ),
$comparisons = '',
$options = '',
isSelected,
currentChoice;
event.preventDefault();
try {
allChoices = JSON.parse( allChoices );
} catch ( e ) {
allChoices = [];
}
$wrapper.find( 'h4.logic-title' ).text( selectionText );
currentChoice = allChoices.find( ( { id } ) => id === selection );
if ( 'object' === typeof currentChoice ) {
if ( 'object' === typeof currentChoice.comparisons ) {
jQuery.each( currentChoice.comparisons, function( comparisonValue, comparisonName ) {
isSelected = 'equal' === comparisonValue ? 'active' : '';
$comparisons += '