260 lines
6.6 KiB
JavaScript
260 lines
6.6 KiB
JavaScript
var FusionPageBuilder = FusionPageBuilder || {};
|
|
|
|
( function() {
|
|
|
|
jQuery( document ).ready( function() {
|
|
|
|
// Progress Bar Element View.
|
|
FusionPageBuilder.fusion_progress = FusionPageBuilder.ElementView.extend( {
|
|
|
|
/**
|
|
* Modify template attributes.
|
|
*
|
|
* @since 2.0
|
|
* @return {Object}
|
|
*/
|
|
filterTemplateAtts: function( atts ) {
|
|
var attributes = {};
|
|
|
|
// Validate values.
|
|
this.validateValues( atts.values );
|
|
|
|
// Create attribute objects
|
|
attributes.attr = this.buildAttr( atts.values );
|
|
attributes.attrBar = this.buildBarAttr( atts.values );
|
|
attributes.attrSpan = this.buildSpanAttr( atts.values, atts.extras );
|
|
attributes.attrEditor = this.buildInlineEditorAttr( atts.values );
|
|
attributes.attrContent = this.buildContentAttr( atts.values );
|
|
|
|
// Any extras that need passed on.
|
|
attributes.cid = this.model.get( 'cid' );
|
|
attributes.values = atts.values;
|
|
attributes.percentage = this.sanitizePercentage( atts.values.percentage );
|
|
|
|
return attributes;
|
|
},
|
|
|
|
/**
|
|
* Modifies the values.
|
|
*
|
|
* @since 2.0
|
|
* @param {Object} values - The values object.
|
|
* @return {void}
|
|
*/
|
|
validateValues: function( values ) {
|
|
values.filledbordersize = _.fusionValidateAttrValue( values.filledbordersize, 'px' );
|
|
values.margin_bottom = _.fusionValidateAttrValue( values.margin_bottom, 'px' );
|
|
values.margin_left = _.fusionValidateAttrValue( values.margin_left, 'px' );
|
|
values.margin_right = _.fusionValidateAttrValue( values.margin_right, 'px' );
|
|
values.margin_top = _.fusionValidateAttrValue( values.margin_top, 'px' );
|
|
},
|
|
|
|
/**
|
|
* Builds attributes.
|
|
*
|
|
* @since 2.0
|
|
* @param {Object} values - The values object.
|
|
* @return {Object}
|
|
*/
|
|
buildAttr: function( values ) {
|
|
var attr = _.fusionVisibilityAtts( values.hide_on_mobile, {
|
|
class: 'fusion-progressbar',
|
|
style: this.getInlineStyle( values )
|
|
} );
|
|
|
|
if ( 'above_bar' === values.text_position ) {
|
|
attr[ 'class' ] += ' fusion-progressbar-text-above-bar';
|
|
} else if ( 'below_bar' === values.text_position ) {
|
|
attr[ 'class' ] += ' fusion-progressbar-text-below-bar';
|
|
} else {
|
|
attr[ 'class' ] += ' fusion-progressbar-text-on-bar';
|
|
}
|
|
|
|
if ( '' !== values[ 'class' ] ) {
|
|
attr[ 'class' ] += ' ' + values[ 'class' ];
|
|
}
|
|
|
|
if ( '' !== values.id ) {
|
|
attr.id = values.id;
|
|
}
|
|
|
|
return attr;
|
|
},
|
|
|
|
/**
|
|
* Builds attributes.
|
|
*
|
|
* @since 2.0
|
|
* @return {Object}
|
|
*/
|
|
buildInlineEditorAttr: function() {
|
|
var attr = {
|
|
class: 'fusion-progressbar-text',
|
|
id: 'awb-progressbar-label-' + this.model.get( 'cid' )
|
|
};
|
|
|
|
attr = _.fusionInlineEditor( {
|
|
cid: this.model.get( 'cid' ),
|
|
'disable-return': true,
|
|
'disable-extra-spaces': true,
|
|
toolbar: 'simple'
|
|
}, attr );
|
|
|
|
return attr;
|
|
},
|
|
|
|
/**
|
|
* Builds attributes.
|
|
*
|
|
* @since 2.0
|
|
* @param {Object} values - The values object.
|
|
* @return {Object}
|
|
*/
|
|
buildContentAttr: function( values ) {
|
|
var attr = {
|
|
class: 'progress progress-bar-content',
|
|
role: 'progressbar',
|
|
style: ''
|
|
};
|
|
|
|
attr.style += 'width:' + this.sanitizePercentage( values.percentage ) + '%;';
|
|
|
|
attr.role = 'progressbar';
|
|
attr[ 'aria-labelledby' ] = 'awb-progressbar-label-' + this.model.get( 'cid' );
|
|
attr[ 'aria-valuemin' ] = '0';
|
|
attr[ 'aria-valuemax' ] = '100';
|
|
attr[ 'aria-valuenow' ] = values.percentage;
|
|
|
|
return attr;
|
|
},
|
|
|
|
/**
|
|
* Builds attributes.
|
|
*
|
|
* @since 2.0
|
|
* @param {Object} values - The values object.
|
|
* @return {Object}
|
|
*/
|
|
buildBarAttr: function( values ) {
|
|
var attr = {
|
|
class: 'fusion-progressbar-bar progress-bar',
|
|
style: ''
|
|
};
|
|
|
|
if ( 'yes' === values.striped ) {
|
|
attr[ 'class' ] += ' progress-striped';
|
|
}
|
|
|
|
if ( 'yes' === values.animated_stripes ) {
|
|
attr[ 'class' ] += ' active';
|
|
}
|
|
|
|
if ( '' !== values[ 'class' ] ) {
|
|
attr[ 'class' ] += ' ' + values[ 'class' ];
|
|
}
|
|
|
|
if ( '' !== values.id ) {
|
|
attr.id = values.id;
|
|
}
|
|
|
|
return attr;
|
|
},
|
|
|
|
/**
|
|
* Builds attributes.
|
|
*
|
|
* @since 2.0
|
|
* @param {Object} values - The values object.
|
|
* @return {Object}
|
|
*/
|
|
buildSpanAttr: function( values, extras ) {
|
|
var attr = {
|
|
class: 'progress-title',
|
|
style: ''
|
|
};
|
|
var empty_percentage = 0;
|
|
|
|
if ( 'on_bar' === values.text_position ) {
|
|
empty_percentage = 100 - this.sanitizePercentage( values.percentage );
|
|
if ( 66 > empty_percentage || 'true' === values.force_text_align ) {
|
|
if ( ! extras.is_rtl ) {
|
|
attr.style += 'right: calc(15px + ' + empty_percentage + '%);';
|
|
} else {
|
|
attr.style += 'left: calc(15px + ' + empty_percentage + '%);';
|
|
}
|
|
}
|
|
}
|
|
|
|
return attr;
|
|
},
|
|
|
|
getInlineStyle: function( values ) {
|
|
var cssVarsOptions,
|
|
customVars = {};
|
|
this.values = values;
|
|
|
|
cssVarsOptions = [
|
|
'text_align',
|
|
'text_line_height',
|
|
'text_text_transform',
|
|
'textcolor',
|
|
'height',
|
|
'filledcolor',
|
|
'unfilledcolor',
|
|
|
|
'border_radius_top_left',
|
|
'border_radius_top_right',
|
|
'border_radius_bottom_left',
|
|
'border_radius_bottom_right',
|
|
|
|
'filledbordersize',
|
|
'filledbordercolor'
|
|
];
|
|
|
|
cssVarsOptions.margin_top = { 'callback': _.fusionGetValueWithUnit };
|
|
cssVarsOptions.margin_right = { 'callback': _.fusionGetValueWithUnit };
|
|
cssVarsOptions.margin_bottom = { 'callback': _.fusionGetValueWithUnit };
|
|
cssVarsOptions.margin_left = { 'callback': _.fusionGetValueWithUnit };
|
|
|
|
cssVarsOptions.text_font_size = { 'callback': _.fusionGetValueWithUnit };
|
|
cssVarsOptions.text_letter_spacing = { 'callback': _.fusionGetValueWithUnit };
|
|
|
|
jQuery.each( _.fusionGetFontStyle( 'text_font', values, 'object' ), function( rule, value ) {
|
|
customVars[ rule ] = value;
|
|
} );
|
|
|
|
return this.getCssVarsForOptions( cssVarsOptions ) + this.getCustomCssVars( customVars );
|
|
},
|
|
|
|
/**
|
|
* Sanitize the percentage value, because this can come also from a
|
|
* dynamic data which can be a string or a float.
|
|
*
|
|
* @since 3.6
|
|
* @param {Object} values - The values object.
|
|
* @return {Object}
|
|
*/
|
|
sanitizePercentage: function( percentage ) {
|
|
percentage = parseFloat( percentage );
|
|
|
|
// percentage can be NaN if parseFloat failed.
|
|
if ( ! percentage ) {
|
|
percentage = 0;
|
|
}
|
|
|
|
percentage = Math.round( percentage );
|
|
|
|
if ( 0 > percentage ) {
|
|
percentage = 0;
|
|
}
|
|
|
|
if ( 100 < percentage ) {
|
|
percentage = 100;
|
|
}
|
|
|
|
return percentage;
|
|
}
|
|
} );
|
|
} );
|
|
}( jQuery ) );
|