2026-02-05 17:08:59 +03:00

220 lines
6.3 KiB
JavaScript

/* global fusionAllElements, FusionPageBuilderElements */
var FusionPageBuilder = FusionPageBuilder || {};
( function() {
jQuery( document ).ready( function() {
// Slide child View.
FusionPageBuilder.fusion_slide = FusionPageBuilder.ChildElementView.extend( {
/**
* Runs just before view is removed.
*
* @since 2.0.0
* @return null
*/
beforeRemove: function() {
var parentView = window.FusionPageBuilderViewManager.getView( this.model.get( 'parent' ) );
if ( 'undefined' !== typeof jQuery( '#fb-preview' )[ 0 ].contentWindow.jQuery( this.$el.closest( '.flexslider:not(.tfs-slider)' ) ).data( 'flexslider' ) ) {
jQuery( '#fb-preview' )[ 0 ].contentWindow.jQuery( this.$el.closest( '.flexslider:not(.tfs-slider)' ) ).flexslider( 'destroy' );
}
if ( false === parentView.model.attributes.showPlaceholder && 1 === parentView.model.children.length ) {
this.$el.closest( '.fusion-slider-sc' ).addClass( 'fusion-show-placeholder' );
parentView.model.attributes.showPlaceholder = true;
}
},
/**
* Runs during render() call.
*
* @since 2.0
* @return {void}
*/
onRender: function() {
if ( 'undefined' !== typeof this.model.attributes.selectors ) {
this.model.attributes.selectors[ 'class' ] += ' ' + this.className;
this.model.attributes.selectors[ 'class' ] += ( 'video' === this.model.attributes.params.type ) ? ' video' : ' image';
this.setElementAttributes( this.$el, this.model.attributes.selectors );
}
},
/**
* Runs after view DOM is patched.
*
* @since 2.0.0
* @return {void}
*/
afterPatch: function() {
if ( 'undefined' !== typeof this.model.attributes.selectors ) {
this.model.attributes.selectors[ 'class' ] += ' ' + this.className;
this.model.attributes.selectors[ 'class' ] += ( 'video' === this.model.attributes.params.type ) ? ' video' : ' image';
this.setElementAttributes( this.$el, this.model.attributes.selectors );
}
this._refreshJs();
},
/**
* Runs after view DOM is patched.
*
* @since 2.0
* @return {void}
*/
beforePatch: function() {
var parentView = window.FusionPageBuilderViewManager.getView( this.model.get( 'parent' ) );
if (
true === parentView.model.attributes.showPlaceholder &&
(
( 'undefined' !== this.model.attributes.params.image && '' !== this.model.attributes.params.image ) ||
( 'undefined' !== this.model.attributes.params.video && '' !== this.model.attributes.params.video )
)
) {
this.$el.closest( '.fusion-slider-sc' ).removeClass( 'fusion-show-placeholder' );
parentView.model.attributes.showPlaceholder = false;
}
},
/**
* Modify template attributes.
*
* @since 2.0
* @param {Object} atts - The attributes.
* @return {Object}
*/
filterTemplateAtts: function( atts ) {
var attributes = {};
// Validate values and extras.
this.validateValues( atts.values );
// Create attribute objects.
attributes.sliderShortcodeSlideLink = this.buildSlideLinkAttr( atts.values );
attributes.sliderShortcodeSlideLi = this.buildLiAttr( atts.values );
attributes.sliderShortcodeSlideImg = this.buildImgAttr( atts.values );
attributes.sliderShortcodeSlideImgWrapper = this.buildSlideImgWrapperAttr( atts.values );
attributes.link = atts.values.link;
attributes.type = atts.values.type;
attributes.video = atts.values.video;
attributes.elementContent = atts.values.element_content;
// Any extras that need passed on.
attributes.cid = this.model.get( 'cid' );
attributes.parent = this.model.get( 'parent' );
return attributes;
},
/**
* Modifies the values.
*
* @since 2.0
* @param {Object} values - The values object.
* @return {void}
*/
validateValues: function( values ) {
values.alt = '';
values.title = '';
values.src = values.element_content ? values.element_content.replace( '×', 'x' ) : '';
},
/**
* Builds attributes.
*
* @since 2.0
* @param {Object} values - The values.
* @return {Object}
*/
buildSlideLinkAttr: function( values ) {
var sliderShortcodeSlideLink = {};
if ( 'yes' === values.lightbox ) {
sliderShortcodeSlideLink[ 'class' ] = 'lightbox-enabled';
sliderShortcodeSlideLink[ 'data-rel' ] = 'prettyPhoto[gallery_slider_' + this.model.get( 'cid' ) + ']';
}
sliderShortcodeSlideLink.href = values.link;
sliderShortcodeSlideLink.target = values.linktarget;
if ( '_blank' === sliderShortcodeSlideLink.target ) {
sliderShortcodeSlideLink.rel = 'noopener noreferrer';
}
sliderShortcodeSlideLink.title = values.title;
return sliderShortcodeSlideLink;
},
/**
* Builds attributes.
*
* @since 2.0
* @param {Object} values - The values.
* @return {Object}
*/
buildLiAttr: function( values ) {
var sliderShortcodeSlideLi = {
class: ( 'video' === values.type ) ? 'video' : 'image'
};
this.model.set( 'selectors', sliderShortcodeSlideLi );
return sliderShortcodeSlideLi;
},
/**
* Builds attributes.
*
* @since 2.0
* @param {Object} values - The values.
* @return {Object}
*/
buildImgAttr: function( values ) {
var sliderShortcodeSlideImg = {
src: values.image,
alt: values.alt
};
return sliderShortcodeSlideImg;
},
/**
* Builds attributes.
*
* @since 2.0
* @return {Object}
*/
buildSlideImgWrapperAttr: function() {
var sliderShortcodeSlideImgWrapper = {},
parent = this.model.get( 'parent' ),
parentModel,
parentValues;
if ( parent ) {
parentModel = FusionPageBuilderElements.find( function( model ) {
return model.get( 'cid' ) == parent;
} );
parentValues = jQuery.extend( true, {}, fusionAllElements.fusion_slider.defaults, _.fusionCleanParameters( parentModel.get( 'params' ) ) );
if ( '' !== parentValues.hover_type ) {
sliderShortcodeSlideImgWrapper = {
class: 'fusion-image-hover-element hover-type-' + parentValues.hover_type
};
}
}
return sliderShortcodeSlideImgWrapper;
}
} );
} );
}( jQuery ) );