/**
* Astra Addon Common functions
*
* @package Astra Addon
* @since 1.0.0
*/
/**
* Convert HEX to RGBA
*
* @param {string} hex HEX color code.
* @param {number} alpha Alpha number for RGBA.
* @return {string} Return RGBA or RGB.
*/
function astra_hex2rgba( hex, alpha ) {
hex = hex.replace( '#', '' );
var r = g = b = '';
if ( hex.length == 3 ) {
r = get_hexdec( hex.substring( 0, 1 ) + hex.substring( 0, 1 ) );
g = get_hexdec( hex.substring( 1, 1 ) + hex.substring( 1, 1 ) );
b = get_hexdec( hex.substring( 2, 1 ) + hex.substring( 2, 1 ) );
} else {
r = get_hexdec( hex.substring( 0, 2 ) );
g = get_hexdec( hex.substring( 2, 4 ) );
b = get_hexdec( hex.substring( 4, 6 ) );
}
var rgb = r + ',' + g + ',' + b;
if ( '' == alpha ) {
return 'rgb(' + rgb + ')';
} else {
alpha = parseFloat( alpha );
return 'rgba(' + rgb + ',' + alpha + ')';
}
}
/**
* Check the color is HEX or not
*
* @param {string} hex | rgba | rgb HEX | RGBA | RGB color code.
* @return {bool} Return true | false.
*/
function astraIsHexColor( string ){
isHex = false;
regexp = /^[0-9a-fA-F]+$/;
if ( regexp.test( string ) ) {
isHex = true;
}
return isHex;
}
/**
* Trim A From RGBA color scheme.
*
* @param {string} rgba | rgb RGBA | RGB color code.
* @return {string} Return string
*/
function astraTrimAlpha( string ) {
return string.replace(/^\s+|\s+$/gm,'');
}
/**
* Convert RGBA to HEX
*
* @param {string} hex | rgba | rgb HEX | RGBA | RGB color code.
* @return {string} Return HEX color.
*/
function astraRgbaToHex( string ) {
if ( '' !== string ) {
if ( ! astraIsHexColor( string.replace( '#', '' ) ) ) {
var parts = string.substring(string.indexOf("(")).split(","),
r = parseInt(astraTrimAlpha(parts[0].substring(1)), 10),
g = parseInt(astraTrimAlpha(parts[1]), 10),
b = parseInt(astraTrimAlpha(parts[2]), 10),
a = parseFloat(astraTrimAlpha(parts[3].substring(0, parts[3].length - 1))).toFixed(2);
// Explicitly converted 'a' to a number before multiplication
string = ('#' + r.toString(16) + g.toString(16) + b.toString(16) + (Math.round(Number(a) * 255)).toString(16).padStart(2, '0'));
}
}
return string;
}
/**
* Apply CSS for the element
*/
function astra_color_responsive_css( addon, control, css_property, selector ) {
wp.customize( control, function( value ) {
value.bind( function( value ) {
if ( value.desktop || value.mobile || value.tablet ) {
// Remove '
);
} else {
jQuery( 'style#' + control + '-' + addon ).remove();
}
} );
} );
}
/**
* Apply CSS for the element
*/
function astra_apply_responsive_background_css( control, selector, device, singleColorSelector, addon ) {
wp.customize( control, function( value ) {
value.bind( function( bg_obj ) {
addon = addon || '';
singleColorSelector = singleColorSelector || '';
addon = ( addon ) ? addon : 'header';
control = control.replace( '[', '-' );
control = control.replace( ']', '' );
if( '' === bg_obj[device] || undefined === bg_obj[device] ){
return;
}
var gen_bg_css = '';
var bg_img = bg_obj[device]['background-image'];
var bg_tab_img = bg_obj['tablet']['background-image'];
var bg_desk_img = bg_obj['desktop']['background-image'];
var bg_color = bg_obj[device]['background-color'];
var tablet_css = ( bg_obj['tablet']['background-image'] ) ? true : false;
var desktop_css = ( bg_obj['desktop']['background-image'] ) ? true : false;
if( undefined !== bg_obj[device]['background-type'] && '' !== bg_obj[device]['background-type'] ) {
if ( ( 'color' === bg_obj[device]['background-type'] ) ) {
if ( '' !== bg_img && '' !== bg_color && undefined !== bg_color && 'unset' !== bg_color ) {
gen_bg_css = 'background-image: linear-gradient(to right, ' + bg_color + ', ' + bg_color + '), url(' + bg_img + ');';
} else if ( 'mobile' === device ) {
if ( desktop_css ) {
gen_bg_css = 'background-image: linear-gradient(to right, ' + bg_color + ', ' + bg_color + '), url(' + bg_desk_img + ');';
} else if ( tablet_css ) {
gen_bg_css = 'background-image: linear-gradient(to right, ' + bg_color + ', ' + bg_color + '), url(' + bg_tab_img + ');';
} else {
gen_bg_css = 'background-color: ' + bg_color + ';';
gen_bg_css += 'background-image: none;';
}
} else if ( 'tablet' === device ) {
if ( desktop_css ) {
gen_bg_css = 'background-image: linear-gradient(to right, ' + bg_color + ', ' + bg_color + '), url(' + bg_desk_img + ');';
} else {
gen_bg_css = 'background-color: ' + bg_color + ';';
gen_bg_css += 'background-image: none;';
}
} else if ( undefined === bg_img || '' === bg_img ) {
gen_bg_css = 'background-color: ' + bg_color + ';';
gen_bg_css += 'background-image: none;';
}
} else if ( 'image' === bg_obj[device]['background-type'] ) {
if ( '' !== bg_img ) {
if ( 'overlay-type' in bg_obj[device] && 'none' !== bg_obj[device]['overlay-type'] ) {
let overlay_color = 'overlay-color' in bg_obj[device] ? bg_obj[device]['overlay-color'] : '';
let overlay_opacity = 'overlay-opacity' in bg_obj[device] ? bg_obj[device]['overlay-opacity'] : '';
let overlay_gradient = 'overlay-gradient' in bg_obj[device] ? bg_obj[device]['overlay-gradient'] : '';
if ( 'classic' === bg_obj[device]['overlay-type'] && '' !== overlay_color ) {
if ( '' !== overlay_opacity ) {
wp.customize.preview.send( 'refresh' );
return;
}
gen_bg_css = 'background-image: linear-gradient(to right, ' + overlay_color + ', ' + overlay_color + '), url(' + bg_img + ');';
} else if ( 'gradient' === bg_obj[device]['overlay-type'] && '' !== overlay_gradient ) {
gen_bg_css = 'background-image: ' + overlay_gradient + ', url(' + bg_img + ');';
} else {
gen_bg_css = 'background-image: url(' + bg_img + ');';
}
} else {
gen_bg_css = 'background-image: url(' + bg_img + ');';
}
}
} else if ( 'gradient' === bg_obj[device]['background-type'] ) {
if ( '' !== bg_color && 'unset' !== bg_color ) {
gen_bg_css = 'background-image: ' + bg_color + ';';
}
}
}
if ( '' !== bg_img ) {
gen_bg_css += 'background-repeat: ' + bg_obj[device]['background-repeat'] + ';';
gen_bg_css += 'background-position: ' + bg_obj[device]['background-position'] + ';';
gen_bg_css += 'background-size: ' + bg_obj[device]['background-size'] + ';';
gen_bg_css += 'background-attachment: ' + bg_obj[device]['background-attachment'] + ';';
}
// Remove old.
jQuery( 'style#' + control + '-' + device + '-' + addon ).remove();
if ( 'desktop' == device ) {
var dynamicStyle = ''
}
if ( 'tablet' == device ) {
var dynamicStyle = ''
}
if ( 'mobile' == device ) {
var dynamicStyle = ''
}
// Concat and append new