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

268 lines
8.0 KiB
JavaScript

/* global FusionPageBuilderElements, fusionAllElements */
var FusionPageBuilder = FusionPageBuilder || {};
( function() {
jQuery( document ).ready( function() {
// Counter box child View
FusionPageBuilder.fusion_counter_box = FusionPageBuilder.ChildElementView.extend( {
/**
* Runs after view DOM is patched.
*
* @since 2.0
* @return {void}
*/
afterPatch: function() {
this._refreshJs();
if ( 'undefined' !== typeof this.model.attributes.selectors ) {
this.model.attributes.selectors[ 'class' ] += ' ' + this.className;
this.setElementAttributes( this.$el, this.model.attributes.selectors );
}
},
/**
* 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.setElementAttributes( this.$el, this.model.attributes.selectors );
}
},
/**
* Modify template attributes.
*
* @since 2.0
* @param {Object} atts - The attributes.
* @return {Object}
*/
filterTemplateAtts: function( atts ) {
var counterBoxContainer,
elementContent = atts.values.element_content,
parent = this.model.get( 'parent' ),
parentModel = FusionPageBuilderElements.find( function( model ) {
return model.get( 'cid' ) == parent;
} ),
parentValues = jQuery.extend( true, {}, fusionAllElements.fusion_counters_box.defaults, _.fusionCleanParameters( parentModel.get( 'params' ) ) ),
counterBoxShortcodeContent,
counterWrapper;
// Validate values and extras.
this.validateValues( atts.values, atts.params );
this.validateParentValues( parentValues );
counterBoxContainer = this.buildContainerAtts();
counterWrapper = this.buildCounterWrapper( atts.values, parentValues );
counterBoxShortcodeContent = this.buildContentAttr();
this.setSelectors( atts.values, parentValues );
// Reset attribute objet.
atts = {};
// Create attribute objects.
atts.counterBoxContainer = counterBoxContainer;
atts.counterWrapper = counterWrapper;
atts.counterBoxShortcodeContent = counterBoxShortcodeContent;
// Any extras that need passed on.
atts.cid = this.model.get( 'cid' );
atts.parent = parent;
atts.output = elementContent;
return atts;
},
/**
* Modifies values.
*
* @since 2.0
* @param {Object} values - The values.
* @param {Object} params - The parameters.
* @return {void}
*/
validateValues: function( values, params ) {
values = jQuery.extend( true, {}, fusionAllElements.fusion_counter_box.defaults, _.fusionCleanParameters( params ) );
values.value = values.value.replace( ',', '.' );
values[ 'float' ] = values.value.split( '.' );
if ( 'undefined' !== typeof values[ 'float' ][ 1 ] ) {
values.decimals = values[ 'float' ][ 1 ].length;
}
},
/**
* Modifies parent values.
*
* @since 2.0
* @param {Object} parentValues - The parent values.
* @return {void}
*/
validateParentValues: function( parentValues ) {
parentValues.title_size = _.fusionValidateAttrValue( parentValues.title_size, '' );
parentValues.icon_size = _.fusionValidateAttrValue( parentValues.icon_size, '' );
parentValues.body_size = _.fusionValidateAttrValue( parentValues.body_size, '' );
parentValues.columns = Math.min( 6, parentValues.columns );
},
/**
* Builds attributes.
*
* @since 2.0
* @return {Object}
*/
buildContainerAtts: function() {
var counterBoxContainer = {
class: 'counter-box-container'
};
return counterBoxContainer;
},
/**
* Builds the HTML for the wrapper element.
*
* @since 2.0
* @param {Object} values - The values.
* @param {Object} parentValues - The parent element values.
* @return {string}
*/
buildCounterWrapper: function( values, parentValues ) {
var unitOutput = values.unit ? '<span class="unit">' + values.unit + '</span>' : '',
initValue = ( 'up' === values.direction ) ? 0 : values.value,
iconOutput = '',
decimals = 0,
counter,
selectedIcon,
counterBoxShortcodeCounter,
counterBoxShortcodeCounterContainer,
counterBoxShortcodeIcon,
decimalsValue;
values.value = values.value.replace( ',', '.' );
decimalsValue = values.value.split( '.' );
if ( 'undefined' !== typeof decimalsValue[ 1 ] ) {
decimals = decimalsValue[ 1 ].length;
}
// counterBoxShortcodeCounter Attributes.
counterBoxShortcodeCounter = {
class: 'display-counter',
'data-value': values.value,
'data-delimiter': values.delimiter,
'data-direction': values.direction,
'data-decimals': decimals
};
// Make value editable.
counterBoxShortcodeCounter = _.fusionInlineEditor( {
cid: this.model.get( 'cid' ),
param: 'value',
toolbar: false,
'disable-return': true,
'disable-extra-spaces': true
}, counterBoxShortcodeCounter );
counter = '<span ' + _.fusionGetAttributes( counterBoxShortcodeCounter ) + '>' + initValue + '</span>';
if ( values.icon || parentValues.icon ) {
selectedIcon = ( values.icon ) ? values.icon : parentValues.icon;
counterBoxShortcodeIcon = {
class: 'counter-box-icon fontawesome-icon ' + _.fusionFontAwesome( selectedIcon ),
'aria-hidden': 'true'
};
iconOutput = '<i ' + _.fusionGetAttributes( counterBoxShortcodeIcon ) + '></i>';
}
counter = ( 'prefix' === values.unit_pos ) ? iconOutput + unitOutput + counter : iconOutput + counter + unitOutput;
// counterBoxShortcodeCounterContainer Atributes.
counterBoxShortcodeCounterContainer = {
class: 'content-box-percentage content-box-counter'
};
return '<div ' + _.fusionGetAttributes( counterBoxShortcodeCounterContainer ) + '>' + counter + '</div>';
},
/**
* Builds attributes.
*
* @since 2.0
* @return {Object}
*/
buildContentAttr: function() {
var counterBoxShortcodeContent = {
class: 'counter-box-content'
};
// Make content editable.
counterBoxShortcodeContent = _.fusionInlineEditor( {
cid: this.model.get( 'cid' ),
param: 'element_content',
toolbar: 'simple',
'disable-return': true,
'disable-extra-spaces': true
}, counterBoxShortcodeContent );
return counterBoxShortcodeContent;
},
/**
* Sets selectors in the model.
*
* @since 2.0
* @param {Object} values - The values.
* @param {Object} parentValues - The parent element values.
* @return {void}
*/
setSelectors: function( values, parentValues ) {
var columns = 1,
counterBoxShortcode = {},
animations;
if ( 'undefined' !== typeof parentValues.columns && '' !== parentValues.columns && 0 !== parentValues.columns ) {
columns = 12 / parentValues.columns;
}
counterBoxShortcode[ 'class' ] = 'fusion-counter-box fusion-column col-counter-box counter-box-wrapper col-lg-' + columns + ' col-md-' + columns + ' col-sm-' + columns;
if ( '5' === parentValues.columns || 5 === parentValues.columns ) {
counterBoxShortcode[ 'class' ] = 'fusion-counter-box fusion-column col-counter-box counter-box-wrapper col-lg-2 col-md-2 col-sm-2';
}
if ( 'yes' === parentValues.icon_top ) {
counterBoxShortcode[ 'class' ] += ' fusion-counter-box-icon-top';
}
if ( '' !== values[ 'class' ] ) {
counterBoxShortcode[ 'class' ] += ' ' + values[ 'class' ];
}
if ( '' !== values.id ) {
counterBoxShortcode.id = values.id;
}
if ( parentValues.animation_type ) {
animations = _.fusionGetAnimations( {
offset: parentValues.animation_offset
} );
counterBoxShortcode = jQuery.extend( counterBoxShortcode, animations );
counterBoxShortcode[ 'class' ] += ' ' + counterBoxShortcode.animation_class;
delete counterBoxShortcode.animation_class;
}
this.model.set( 'selectors', counterBoxShortcode );
}
} );
} );
}( jQuery ) );