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

204 lines
5.6 KiB
JavaScript

/* globals FusionApp */
var FusionPageBuilder = FusionPageBuilder || {};
( function() {
jQuery( document ).ready( function() {
// Fusion flickr.
FusionPageBuilder.fusion_flickr = FusionPageBuilder.FormComponentView.extend( {
/**
* Modify template attributes.
*
* @since 2.0
* @param {Object} atts - The attributes object.
* @return {Object}
*/
filterTemplateAtts: function( atts ) {
var attributes = {};
this.values = atts.values;
// Create attribute objects
attributes.atts = this.buildAttr( atts.values );
// Any extras that need passed on.
attributes.cid = this.model.get( 'cid' );
attributes.values = atts.values;
attributes.flickrItems = FusionApp.previewWindow.fusionFlickrItems;
return attributes;
},
/**
* Builds attributes.
*
* @since 2.0
* @param {Object} values - The values object.
* @return {Object}
*/
buildAttr: function( values ) {
var attr = {};
attr[ 'class' ] = 'fusion-flickr-element flickr-' + this.model.get( 'cid' ) + ' ' + values[ 'class' ];
attr = _.fusionVisibilityAtts( values.hide_on_mobile, attr );
if ( '' !== values.id ) {
attr.id = values.id;
}
if ( '' !== values.hover_type ) {
attr[ 'class' ] += ' hover-' + values.hover_type;
}
attr.style = '';
if ( '' !== values.flickr_id ) {
attr[ 'data-id' ] = values.flickr_id;
}
if ( '' !== values.type ) {
attr[ 'data-type' ] = values.type;
}
if ( '' !== values.album_id ) {
attr[ 'data-album_id' ] = values.album_id;
}
if ( '' !== values.count ) {
attr[ 'data-count' ] = values.count;
}
if ( '' !== values.api_key ) {
attr[ 'data-api_key' ] = values.api_key;
}
if ( '' !== values.link_type ) {
attr[ 'data-link_type' ] = values.link_type;
}
if ( 'page' === values.link_type && '_blank' === values.link_target ) {
attr[ 'data-link_target' ] = values.link_target;
}
attr.style += this.buildAspectRatioStyles( values );
attr.style += this.buildColumnStyles( values );
attr.style += this.getStyleVariables();
//Animation
attr = _.fusionAnimations( values, attr );
return attr;
},
/**
* Gets style variables.
*
* @since 3.9
* @return {String}
*/
getStyleVariables: function() {
const cssVarsOptions = [];
cssVarsOptions.margin_top = { 'callback': _.fusionGetValueWithUnit };
cssVarsOptions.margin_right = { 'callback': _.fusionGetValueWithUnit };
cssVarsOptions.margin_bottom = { 'callback': _.fusionGetValueWithUnit };
cssVarsOptions.margin_left = { 'callback': _.fusionGetValueWithUnit };
cssVarsOptions.margin_top_medium = { 'callback': _.fusionGetValueWithUnit };
cssVarsOptions.margin_right_medium = { 'callback': _.fusionGetValueWithUnit };
cssVarsOptions.margin_bottom_medium = { 'callback': _.fusionGetValueWithUnit };
cssVarsOptions.margin_left_medium = { 'callback': _.fusionGetValueWithUnit };
cssVarsOptions.margin_top_small = { 'callback': _.fusionGetValueWithUnit };
cssVarsOptions.margin_right_small = { 'callback': _.fusionGetValueWithUnit };
cssVarsOptions.margin_bottom_small = { 'callback': _.fusionGetValueWithUnit };
cssVarsOptions.margin_left_small = { 'callback': _.fusionGetValueWithUnit };
return this.getCssVarsForOptions( cssVarsOptions );
},
/**
* Builds column styles.
*
* @since 3.5
* @param {Object} values - The values object.
* @return {string}
*/
buildColumnStyles: function( values ) {
var styles = '';
_.each( [ 'large', 'medium', 'small' ], function( size ) {
var columns = ( 'large' === size ) ? values.columns : values[ 'columns_' + size ],
columns_spacing = ( 'large' === size ) ? values.columns_spacing : values[ 'columns_spacing_' + size ],
device_abbr = '';
if ( 'small' === size ) {
device_abbr = 'sm-';
}
if ( 'medium' === size ) {
device_abbr = 'md-';
}
if ( '' !== columns ) {
styles += '--awb-' + device_abbr + 'column-width:' + ( 100 / parseInt( columns ) ) + '%;';
}
if ( '' !== columns_spacing ) {
styles += '--awb-' + device_abbr + 'column-space:' + columns_spacing + ';';
}
} );
return styles;
},
/**
* Builds aspect ratio styles.
*
* @since 3.8
* @param {Object} atts - The atts object.
* @return {string}
*/
buildAspectRatioStyles: function( values ) {
var style = '',
aspectRatio,
width,
height;
if ( '' === values.aspect_ratio ) {
return '';
}
// Calc Ratio
if ( 'custom' === values.aspect_ratio && '' !== values.custom_aspect_ratio ) {
style += '--awb-aspect-ratio: 100 / ' + values.custom_aspect_ratio + '%;';
} else {
aspectRatio = values.aspect_ratio.split( '-' );
width = aspectRatio[ 0 ] || '';
height = aspectRatio[ 1 ] || '';
style += `--awb-aspect-ratio: ${width / height};`;
}
//Ratio Position
if ( '' !== values.aspect_ratio_position ) {
style += '--awb-object-position:' + values.aspect_ratio_position + ';';
}
return style;
},
/**
* Things to do, places to go when options change.
*
* @since 2.0.0
* @param {string} paramName - The name of the parameter that changed.
* @param {mixed} paramValue - The value of the option that changed.
* @param {Object} event - The event triggering the option change.
* @return {void}
*/
onOptionChange: function( paramName ) {
if ( 'flickr_id' === paramName || 'count' === paramName ) {
FusionApp.previewWindow.fusionFlickrItems = '';
}
}
} );
} );
}( jQuery ) );