/* global FusionPageBuilderEvents, FusionPageBuilderViewManager, FusionPageBuilderApp, fusionBuilderText */
var FusionPageBuilder = FusionPageBuilder || {};
( function( $ ) {
$( document ).ready( function() {
// Multi Element child sortable item
FusionPageBuilder.MultiElementSortableChild = window.wp.Backbone.View.extend( {
tagName: 'li',
className: 'fusion-builder-data-cid',
initialize: function() {
this.template = FusionPageBuilder.template( $( '#fusion-builder-multi-child-sortable' ).html() );
this.listenTo( FusionPageBuilderEvents, 'fusion-multi-child-update-preview', this.updatePreview );
},
events: {
'click .fusion-builder-multi-setting-options': 'showSettings',
'click .fusion-builder-multi-setting-remove': 'removeView',
'click .fusion-builder-multi-setting-clone': 'cloneElement'
},
render: function() {
this.$el.html( this.template( { atts: this.model.attributes } ) );
return this;
},
cloneElement: function( event ) {
var elementAttributes,
titleLabel = this.$el.find( '.multi-element-child-name' ).html();
if ( event ) {
event.preventDefault();
}
elementAttributes = $.extend( true, {}, this.model.attributes );
elementAttributes.created = 'manually';
elementAttributes.cid = FusionPageBuilderViewManager.generateCid();
elementAttributes.cloned = true;
elementAttributes.targetElement = this.$el;
elementAttributes.titleLabel = titleLabel;
FusionPageBuilderApp.collection.add( elementAttributes );
FusionPageBuilderEvents.trigger( 'fusion-multi-element-edited' );
},
showSettings: function( event ) {
var modalView,
viewSettings,
$parentValues = {},
$parentOptions;
if ( event ) {
event.preventDefault();
}
FusionPageBuilderApp.MultiElementChildSettings = true;
if ( true === FusionPageBuilderApp.shortcodeGenerator ) {
FusionPageBuilderApp.shortcodeGeneratorMultiElementChild = true;
}
// Check for parent options with value set. If set, add to object.
$parentOptions = jQuery( document ).find( '.fusion-builder-option.range .fusion-hidden-value, .wp-color-picker, .has-child-dependency input, .has-child-dependency select, .has-child-dependency textarea, .has-child-dependency #fusion_builder_content_main, .has-child-dependency #fusion_builder_content_main_child' ).not( ':input[type=button], .fusion-icon-search, .category-search-field, .fusion-builder-table input, .fusion-builder-table textarea, .single-builder-dimension .fusion-builder-dimension input, .fusion-hide-from-atts' );
$parentOptions.each( function() {
if ( jQuery( this ).val().length ) {
$parentValues[ jQuery( this ).attr( 'id' ) ] = jQuery( this ).val();
}
} );
// Add parent value object to the child model.
this.model.set( { parent_values: $parentValues } );
viewSettings = {
model: this.model,
collection: this.collection,
attributes: {
'data-modal_view': 'multi_element_child_settings'
}
};
modalView = new FusionPageBuilder.ModalView( viewSettings );
$( '.fusion_builder_modal_multi_element_settings_container' ).last().after( modalView.render().el );
},
updatePreview: function() {
var $title,
$attributes = this.model.attributes,
$model = this.model,
$image,
$extension,
objImg;
if ( 'undefined' !== typeof $attributes ) {
$title = '';
if ( 'undefined' !== typeof $attributes.params.title && $attributes.params.title.length ) {
$title = $attributes.params.title;
} else if ( 'fusion_image_hotspot_point' === $attributes.element_type && 'undefined' !== typeof $attributes.params.icon && $attributes.params.icon && ( 'undefined' === typeof $attributes.params.title || '' === $attributes.params.title ) ) {
$title = '';
} else if ( 'fusion_flip_box' === $model.get( 'element_type' ) && 'undefined' !== typeof $attributes.params.title_front && $attributes.params.title_front.length ) {
$title = $attributes.params.title_front;
} else if ( 'fusion_testimonial' === $model.get( 'element_type' ) && 'undefined' !== typeof $attributes.params.name && $attributes.params.name.length ) {
$title = $attributes.params.name;
if ( 'undefined' !== typeof $attributes.params.company && $attributes.params.company.length ) {
$title += ', ' + $attributes.params.company;
}
} else if ( 'fusion_testimonial' !== $model.get( 'element_type' ) &&'undefined' !== typeof $attributes.params.image && $attributes.params.image.length ) {
$title = $attributes.params.image;
$image = $title;
// If contains backslash, retreive only last part.
if ( -1 !== $title.indexOf( '/' ) && -1 === $title.indexOf( '[' ) ) {
$title = $title.split( '/' );
$title = $title.slice( -1 )[ 0 ];
}
if ( _.isEmpty( $title ) ) {
$title = fusionBuilderText.image;
}
} else if ( 'undefined' !== typeof $attributes.params.video && $attributes.params.video.length ) {
$title = $attributes.params.video;
} else if ( 'undefined' !== typeof $attributes.params.element_content && $attributes.params.element_content.length ) {
$title = $attributes.params.element_content;
}
// Remove HTML tags but keep quotation marks etc.
if ( -1 === $title.indexOf( 'awb-preview-icon' ) ) {
$title = $title.replace( /(<([^>]+)>)/ig, '' );
}
if ( $title ) {
$title = '' + $title + '';
if ( ! _.isEmpty( $image ) ) {
$extension = $image.substr( $image.lastIndexOf( '.' ) );
if ( 0 === $extension.indexOf( '.' ) ) {
$image = $image.replace( /-\d+x\d+\./, '.' );
$image = $image.replace( $extension, '-66x66' + $extension );
}
objImg = new Image();
objImg.src = $image;
objImg.onload = function() {
$title = '
' + $title;
jQuery( 'li[data-cid=' + $model.get( 'cid' ) + '] .multi-element-child-name' ).html( $title );
};
objImg.onerror = function() {
$title = '' + $title;
jQuery( 'li[data-cid=' + $model.get( 'cid' ) + '] .multi-element-child-name' ).html( $title );
};
} else {
jQuery( 'li[data-cid=' + $model.get( 'cid' ) + '] .multi-element-child-name' ).html( $title );
}
}
}
},
removeView: function( event ) {
if ( event ) {
event.preventDefault();
}
this.remove();
this.model.destroy();
FusionPageBuilderEvents.trigger( 'fusion-multi-element-edited' );
}
} );
} );
}( jQuery ) );