File: /var/www/html/triad-infosec/wp-content/plugins/fusion-builder/shortcodes/fusion-button.php
<?php
/**
* Add an element to fusion-builder.
*
* @package fusion-builder
* @since 1.0
*/
if ( fusion_is_element_enabled( 'fusion_button' ) ) {
if ( ! class_exists( 'FusionSC_Button' ) ) {
/**
* Shortcode class.
*
* @since 1.0
*/
class FusionSC_Button extends Fusion_Element {
/**
* The button counter.
*
* @access private
* @since 1.0
* @var int
*/
private $button_counter = 1;
/**
* Constructor.
*
* @access public
* @since 1.0
*/
public function __construct() {
parent::__construct();
add_filter( 'fusion_attr_button-shortcode', [ $this, 'attr' ] );
add_filter( 'fusion_attr_button-shortcode-icon-divder', [ $this, 'icon_divider_attr' ] );
add_filter( 'fusion_attr_button-shortcode-icon', [ $this, 'icon_attr' ] );
add_filter( 'fusion_attr_button-shortcode-button-text', [ $this, 'button_text_attr' ] );
add_filter( 'fusion_attr_button-shortcode-container', [ $this, 'container_attr' ] );
add_shortcode( 'fusion_button', [ $this, 'render' ] );
}
/**
* Gets the default values.
*
* @static
* @access public
* @since 2.0.0
* @return array
*/
public static function get_element_defaults() {
$fusion_settings = awb_get_fusion_settings();
return [
'aria_role_button' => '0',
'button_el_type' => 'link',
'hide_on_mobile' => fusion_builder_default_visibility( 'string' ),
'sticky_display' => '',
'class' => '',
'id' => '',
'accent_color' => ( '' !== $fusion_settings->get( 'button_accent_color' ) ) ? strtolower( $fusion_settings->get( 'button_accent_color' ) ) : '#ffffff',
'accent_hover_color' => ( '' !== $fusion_settings->get( 'button_accent_hover_color' ) ) ? strtolower( $fusion_settings->get( 'button_accent_hover_color' ) ) : '#ffffff',
'bevel_color' => ( '' !== $fusion_settings->get( 'button_bevel_color' ) ) ? strtolower( $fusion_settings->get( 'button_bevel_color' ) ) : '#54770F',
'bevel_color_hover' => ( '' !== $fusion_settings->get( 'button_bevel_color' ) ) ? strtolower( $fusion_settings->get( 'button_bevel_color_hover' ) ) : '#54770F',
'border_color' => ( '' !== $fusion_settings->get( 'button_border_color' ) ) ? strtolower( $fusion_settings->get( 'button_border_color' ) ) : '#ffffff',
'border_hover_color' => ( '' !== $fusion_settings->get( 'button_border_hover_color' ) ) ? strtolower( $fusion_settings->get( 'button_border_hover_color' ) ) : '#ffffff',
'color' => 'default',
'gradient_colors' => '',
'hover_transition' => '',
'icon' => '',
'icon_divider' => 'no',
'icon_position' => 'left',
'link' => '',
'link_attributes' => '',
'modal' => '',
'size' => '',
'margin_bottom' => '',
'margin_left' => '',
'margin_right' => '',
'margin_top' => '',
'stretch' => ( '' !== $fusion_settings->get( 'button_span' ) ) ? $fusion_settings->get( 'button_span' ) : 'no',
'default_stretch_value' => ( '' !== $fusion_settings->get( 'button_span' ) ) ? $fusion_settings->get( 'button_span' ) : 'no',
'target' => '_self',
'text_transform' => '',
'title' => '',
'type' => ( '' !== $fusion_settings->get( 'button_type' ) ) ? strtolower( $fusion_settings->get( 'button_type' ) ) : 'flat',
'alignment' => '',
'alignment_medium' => '',
'alignment_small' => '',
'animation_type' => '',
'animation_direction' => 'down',
'animation_speed' => '',
'animation_delay' => '',
'animation_offset' => $fusion_settings->get( 'animation_offset' ),
'animation_color' => '',
'padding_top' => '',
'padding_right' => '',
'padding_bottom' => '',
'padding_left' => '',
'font_size' => '',
'line_height' => '',
'letter_spacing' => '',
'fusion_font_family_button_font' => '',
'fusion_font_variant_button_font' => '',
'gradient_start_position' => $fusion_settings->get( 'button_gradient_start' ),
'gradient_end_position' => $fusion_settings->get( 'button_gradient_end' ),
'gradient_type' => $fusion_settings->get( 'button_gradient_type' ),
'radial_direction' => $fusion_settings->get( 'button_radial_direction' ),
'linear_angle' => $fusion_settings->get( 'button_gradient_angle' ),
'border_radius_top_left' => $fusion_settings->get( 'button_border_radius', 'top_left' ),
'border_radius_top_right' => $fusion_settings->get( 'button_border_radius', 'top_right' ),
'border_radius_bottom_right' => $fusion_settings->get( 'button_border_radius', 'bottom_right' ),
'border_radius_bottom_left' => $fusion_settings->get( 'button_border_radius', 'bottom_left' ),
'border_top' => '',
'border_right' => '',
'border_bottom' => '',
'border_left' => '',
// Combined in accent_color.
'icon_color' => '',
'text_color' => '',
// Combined in accent_hover_color.
'icon_hover_color' => '',
'text_hover_color' => '',
// Combined with gradient_colors.
'gradient_hover_colors' => '',
'button_gradient_top_color' => ( '' !== $fusion_settings->get( 'button_gradient_top_color' ) ) ? $fusion_settings->get( 'button_gradient_top_color' ) : '#65bc7b',
'button_gradient_bottom_color' => ( '' !== $fusion_settings->get( 'button_gradient_bottom_color' ) ) ? $fusion_settings->get( 'button_gradient_bottom_color' ) : '#65bc7b',
'button_gradient_top_color_hover' => ( '' !== $fusion_settings->get( 'button_gradient_top_color_hover' ) ) ? $fusion_settings->get( 'button_gradient_top_color_hover' ) : '#5aa86c',
'button_gradient_bottom_color_hover' => ( '' !== $fusion_settings->get( 'button_gradient_bottom_color_hover' ) ) ? $fusion_settings->get( 'button_gradient_bottom_color_hover' ) : '#5aa86c',
'button_accent_color' => ( '' !== $fusion_settings->get( 'button_accent_color' ) ) ? $fusion_settings->get( 'button_accent_color' ) : '#ffffff',
'button_accent_hover_color' => ( '' !== $fusion_settings->get( 'button_accent_hover_color' ) ) ? $fusion_settings->get( 'button_accent_hover_color' ) : '#ffffff',
'button_bevel_color' => ( '' !== $fusion_settings->get( 'button_bevel_color' ) ) ? $fusion_settings->get( 'button_bevel_color' ) : '#54770F',
];
}
/**
* Used to set any other variables for use on front-end editor template.
*
* @static
* @access public
* @since 2.0.0
* @return array
*/
public static function get_element_extras() {
$fusion_settings = awb_get_fusion_settings();
return apply_filters(
'fusion_button_extras',
[
'border_top' => $fusion_settings->get( 'button_border_width', 'top' ),
'border_right' => $fusion_settings->get( 'button_border_width', 'right' ),
'border_bottom' => $fusion_settings->get( 'button_border_width', 'bottom' ),
'border_left' => $fusion_settings->get( 'button_border_width', 'left' ),
'padding_top' => $fusion_settings->get( 'button_padding', 'top' ),
'padding_right' => $fusion_settings->get( 'button_padding', 'right' ),
'padding_bottom' => $fusion_settings->get( 'button_padding', 'bottom' ),
'padding_left' => $fusion_settings->get( 'button_padding', 'left' ),
'button_font_size' => $fusion_settings->get( 'button_typography', 'font-size' ),
]
);
}
/**
* Maps settings to param variables.
*
* @static
* @access public
* @since 2.0.0
* @return array
*/
public static function settings_to_extras() {
return [
'button_border_width[top]' => 'border_top',
'button_border_width[right]' => 'border_right',
'button_border_width[bottom]' => 'border_bottom',
'button_border_width[left]' => 'border_left',
'button_padding[top]' => 'padding_top',
'button_padding[right]' => 'padding_right',
'button_padding[bottom]' => 'padding_bottom',
'button_padding[left]' => 'padding_left',
'button_typography[font-size]' => 'button_font_size',
];
}
/**
* Maps settings to param variables.
*
* @static
* @access public
* @since 2.0.0
* @return array
*/
public static function settings_to_params() {
return [
'button_type' => 'type',
'button_gradient_top_color' => 'button_gradient_top_color',
'button_gradient_bottom_color' => 'button_gradient_bottom_color',
'button_gradient_top_color_hover' => 'button_gradient_top_color_hover',
'button_gradient_bottom_color_hover' => 'button_gradient_bottom_color_hover',
'button_accent_color' => 'accent_color',
'button_accent_hover_color' => 'accent_hover_color',
'button_border_color' => 'border_color',
'button_border_hover_color' => 'border_hover_color',
'button_bevel_color' => 'bevel_color',
'button_span' => 'stretch',
'button_border_radius[top_left]' => 'border_radius_top_left',
'button_border_radius[top_right]' => 'border_radius_top_right',
'button_border_radius[bottom_right]' => 'border_radius_bottom_right',
'button_border_radius[bottom_left]' => 'border_radius_bottom_left',
'button_gradient_start' => 'gradient_start_position',
'button_gradient_end' => 'gradient_end_position',
'button_gradient_type' => 'gradient_type',
'button_radial_direction' => 'radial_direction',
'button_gradient_angle' => 'linear_angle',
];
}
/**
* Render the shortcode
*
* @access public
* @since 1.0
* @param array $args Shortcode parameters.
* @param string $content Content between shortcode.
* @return string HTML output.
*/
public function render( $args, $content = '' ) {
$this->set_element_id( $this->button_counter );
$this->defaults = self::get_element_defaults();
$this->validate_args( $args );
$content = apply_filters( 'fusion_shortcode_content', $content, 'fusion_button', $args );
$icon_html = '';
if ( $this->args['icon'] ) {
$icon_html = '<i ' . FusionBuilder::attributes( 'button-shortcode-icon' ) . '></i>';
if ( 'yes' === $this->args['icon_divider'] ) {
$icon_html = '<span ' . FusionBuilder::attributes( 'button-shortcode-icon-divder' ) . '>' . $icon_html . '</span>';
} elseif ( 'icon_position' === $this->args['hover_transition'] ) {
$icon_html .= $icon_html;
}
}
$button_text = '<span ' . FusionBuilder::attributes( 'button-shortcode-button-text' ) . '>' . do_shortcode( $content ) . '</span>';
if ( 'text_slide_up' === $this->args['hover_transition'] || 'text_slide_down' === $this->args['hover_transition'] ) {
$button_text = '<div class="awb-button-text-transition">' . $button_text . $button_text . '</div>';
}
$inner_content = ( 'left' === $this->args['icon_position'] ) ? $icon_html . $button_text : $button_text . $icon_html;
if ( isset( $args['button_el_type'] ) && 'submit' === $args['button_el_type'] ) {
unset( $this->args['link'] );
unset( $this->args['target'] );
$html = '<button type="submit" ' . FusionBuilder::attributes( 'button-shortcode' ) . ' tabindex="' . $args['tab_index'] . '">' . $inner_content . '</button>';
} else {
$html = '<a ' . FusionBuilder::attributes( 'button-shortcode' ) . '>' . $inner_content . '</a>';
}
$html = '<div ' . FusionBuilder::attributes( 'button-shortcode-container' ) . '>' . $html . '</div>';
$this->button_counter++;
$this->on_render();
return apply_filters( 'fusion_element_button_content', $html, $args );
}
/**
* Validate args and set to object array.
*
* @access public
* @since 3.4
* @param array $args Shortcode parameters.
* @return void
*/
public function validate_args( $args ) {
$this->args = FusionBuilder::set_shortcode_defaults( self::get_element_defaults(), $args, 'fusion_button' );
$this->args = apply_filters( 'fusion_builder_default_args', $this->args, 'fusion_button', $args );
$fusion_settings = awb_get_fusion_settings();
$this->args['default_size'] = false;
if ( ( isset( $args['size'] ) && '' === $args['size'] ) || ! isset( $args['size'] ) ) {
$this->args['default_size'] = true;
}
$this->args['default_stretch'] = false;
if ( ( isset( $args['stretch'] ) && ( '' === $args['stretch'] || 'default' === $args['stretch'] ) ) || ! isset( $args['stretch'] ) ) {
$this->args['default_stretch'] = true;
}
$this->args['default_type'] = false;
if ( ( isset( $args['type'] ) && ( '' === $args['type'] || 'default' === $args['type'] ) ) || ! isset( $args['type'] ) ) {
$this->args['default_type'] = true;
}
$this->args['margin_bottom'] = FusionBuilder::validate_shortcode_attr_value( $this->args['margin_bottom'], 'px' );
$this->args['margin_left'] = FusionBuilder::validate_shortcode_attr_value( $this->args['margin_left'], 'px' );
$this->args['margin_right'] = FusionBuilder::validate_shortcode_attr_value( $this->args['margin_right'], 'px' );
$this->args['margin_top'] = FusionBuilder::validate_shortcode_attr_value( $this->args['margin_top'], 'px' );
if ( empty( $this->args['gradient_colors'] ) ) {
$this->args['gradient_colors'] = strtolower( $this->args['button_gradient_top_color'] ) . '|' . strtolower( $this->args['button_gradient_bottom_color'] );
}
if ( empty( $this->args['gradient_hover_colors'] ) ) {
$this->args['gradient_hover_colors'] = strtolower( $this->args['button_gradient_top_color_hover'] ) . '|' . strtolower( $this->args['button_gradient_bottom_color_hover'] );
}
// Combined variable settings.
$this->args['old_text_color'] = isset( $this->args['text_color'] ) && '' !== $this->args['text_color'] ? $this->args['text_color'] : false;
$this->args['icon_color'] = $this->args['text_color'] = $this->args['accent_color'];
$this->args['icon_hover_color'] = $this->args['text_hover_color'] = $this->args['accent_hover_color'];
if ( ! isset( $args['border_color'] ) && isset( $args['border_color'] ) && '' !== $args['border_color'] ) {
$this->args['border_color'] = $this->args['accent_color'];
}
if ( ! isset( $args['border_hover_color'] ) && isset( $args['accent_hover_color'] ) && '' !== $args['accent_hover_color'] ) {
$this->args['border_hover_color'] = $this->args['accent_hover_color'];
}
if ( $this->args['old_text_color'] ) {
$this->args['text_color'] = $this->args['old_text_color'];
}
if ( $this->args['modal'] ) {
$this->args['link'] = '#';
}
$this->args['type'] = strtolower( $this->args['type'] );
// BC compatibility for button shape.
if ( isset( $args['shape'] ) && '' !== $args['shape'] && ! isset( $args['border_radius'] ) && ! isset( $args['border_radius_top_left'] ) ) {
$args['shape'] = strtolower( $args['shape'] );
$button_radius = [
'square' => '0px',
'round' => '2px',
'round3d' => '4px',
'pill' => '25px',
];
if ( '3d' === $this->args['type'] && 'round' === $args['shape'] ) {
$args['shape'] = 'round3d';
}
$this->args['border_radius_top_left'] = isset( $button_radius[ $args['shape'] ] ) ? $button_radius[ $args['shape'] ] : '0px';
$this->args['border_radius_top_right'] = $this->args['border_radius_top_left'];
$this->args['border_radius_bottom_right'] = $this->args['border_radius_top_left'];
$this->args['border_radius_bottom_left'] = $this->args['border_radius_top_left'];
} elseif ( isset( $args['border_radius'] ) && ! isset( $args['border_radius_top_left'] ) && '' !== $args['border_radius'] ) {
$this->args['border_radius_top_left'] = $args['border_radius'];
$this->args['border_radius_top_right'] = $this->args['border_radius_top_left'];
$this->args['border_radius_bottom_right'] = $this->args['border_radius_top_left'];
$this->args['border_radius_bottom_left'] = $this->args['border_radius_top_left'];
}
$this->args['border_radius_top_left'] = empty( $this->args['border_radius_top_left'] ) ? '0' : fusion_library()->sanitize->get_value_with_unit( $this->args['border_radius_top_left'] );
$this->args['border_radius_top_right'] = empty( $this->args['border_radius_top_right'] ) ? '0' : fusion_library()->sanitize->get_value_with_unit( $this->args['border_radius_top_right'] );
$this->args['border_radius_bottom_right'] = empty( $this->args['border_radius_bottom_right'] ) ? '0' : fusion_library()->sanitize->get_value_with_unit( $this->args['border_radius_bottom_right'] );
$this->args['border_radius_bottom_left'] = empty( $this->args['border_radius_bottom_left'] ) ? '0' : fusion_library()->sanitize->get_value_with_unit( $this->args['border_radius_bottom_left'] );
$this->args['border_radius'] = $this->args['border_radius_top_left'] . ' ' . $this->args['border_radius_top_right'] . ' ' . $this->args['border_radius_bottom_right'] . ' ' . $this->args['border_radius_bottom_left'];
// Legacy single border support.
if ( isset( $args['border_width'] ) && '' !== $args['border_width'] && ! isset( $args['border_top'] ) ) {
$this->args['border_top'] = $args['border_width'];
$this->args['border_right'] = $this->args['border_top'];
$this->args['border_bottom'] = $this->args['border_top'];
$this->args['border_left'] = $this->args['border_top'];
}
// Check if we have any border width direction set, if so we are using border width.
$this->args['default_border_width'] = false;
if ( '' === $this->args['border_top'] && '' === $this->args['border_right'] && '' === $this->args['border_bottom'] && '' === $this->args['border_left'] ) {
$this->args['default_border_width'] = true;
} else {
// Not using default, ensure values for each.
$this->args['border_top'] = '' === $this->args['border_top'] ? $fusion_settings->get( 'button_border_width', 'top' ) : $this->args['border_top'];
$this->args['border_right'] = '' === $this->args['border_right'] ? $fusion_settings->get( 'button_border_width', 'right' ) : $this->args['border_right'];
$this->args['border_bottom'] = '' === $this->args['border_bottom'] ? $fusion_settings->get( 'button_border_width', 'bottom' ) : $this->args['border_bottom'];
$this->args['border_left'] = '' === $this->args['border_left'] ? $fusion_settings->get( 'button_border_width', 'left' ) : $this->args['border_left'];
}
$this->args['border_top'] = empty( $this->args['border_top'] ) ? '0' : fusion_library()->sanitize->get_value_with_unit( $this->args['border_top'] );
$this->args['border_right'] = empty( $this->args['border_right'] ) ? '0' : fusion_library()->sanitize->get_value_with_unit( $this->args['border_right'] );
$this->args['border_bottom'] = empty( $this->args['border_bottom'] ) ? '0' : fusion_library()->sanitize->get_value_with_unit( $this->args['border_bottom'] );
$this->args['border_left'] = empty( $this->args['border_left'] ) ? '0' : fusion_library()->sanitize->get_value_with_unit( $this->args['border_left'] );
$this->args['border_width'] = $this->args['border_top'] . ' ' . $this->args['border_right'] . ' ' . $this->args['border_bottom'] . ' ' . $this->args['border_left'];
}
/**
* Get the styles.
*
* @access protected
* @since 3.5
* @return string
*/
protected function get_style_vars() {
$custom_vars = [];
$this->args['has_gradient'] = false;
// If its custom, default or a custom color scheme.
if ( 'custom' === $this->args['color'] || 'default' === $this->args['color'] || false !== strpos( $this->args['color'], 'scheme-' ) ) {
if ( ! $this->is_default( 'bevel_color' ) ) {
$custom_vars['button_bevel_color'] = $this->args['bevel_color'];
}
if ( ! $this->is_default( 'bevel_color_hover' ) ) {
$custom_vars['button_bevel_color_hover'] = $this->args['bevel_color_hover'];
}
if ( 'default' !== $this->args['color'] ) {
$custom_vars['button_accent_color'] = $this->args['old_text_color'] ? $this->args['old_text_color'] : $this->args['accent_color'];
if ( '' !== $this->args['border_color'] && ! $this->is_default( 'border_color' ) ) {
$custom_vars['button_border_color'] = $this->args['border_color'];
}
if ( $this->args['old_text_color'] ) {
$custom_vars['button_accent_hover_color'] = $this->args['old_text_color'];
} elseif ( '' !== $this->args['accent_hover_color'] ) {
$custom_vars['button_accent_hover_color'] = $this->args['accent_hover_color'];
} elseif ( '' !== $this->args['accent_color'] && ! $this->is_default( 'accent_color' ) ) {
$custom_vars['button_accent_hover_color'] = $this->args['accent_color'];
}
if ( '' !== $this->args['border_hover_color'] ) {
$custom_vars['button_border_hover_color'] = $this->args['border_hover_color'];
} elseif ( '' !== $this->args['accent_color'] ) {
$custom_vars['button_border_hover_color'] = $this->args['accent_color'];
}
}
if ( '' !== $this->args['border_width'] && 'custom' === $this->args['color'] && ! $this->args['default_border_width'] ) {
$custom_vars['button_border_width-top'] = $this->args['border_top'];
$custom_vars['button_border_width-right'] = $this->args['border_right'];
$custom_vars['button_border_width-bottom'] = $this->args['border_bottom'];
$custom_vars['button_border_width-left'] = $this->args['border_left'];
}
if ( ! $this->is_default( 'border_radius_top_left' ) ) {
$custom_vars['button-border-radius-top-left'] = $this->args['border_radius_top_left'];
}
if ( ! $this->is_default( 'border_radius_top_right' ) ) {
$custom_vars['button-border-radius-top-right'] = $this->args['border_radius_top_right'];
}
if ( ! $this->is_default( 'border_radius_bottom_right' ) ) {
$custom_vars['button-border-radius-bottom-right'] = $this->args['border_radius_bottom_right'];
}
if ( ! $this->is_default( 'border_radius_bottom_left' ) ) {
$custom_vars['button-border-radius-bottom-left'] = $this->args['border_radius_bottom_left'];
}
if ( 'default' !== $this->args['color'] ) {
if ( ! $this->is_default( 'linear_angle' ) ) {
$custom_vars['button_gradient_angle'] = (float) $this->args['linear_angle'] . 'deg';
}
if ( ! $this->is_default( 'gradient_start_position' ) ) {
$custom_vars['button_gradient_start'] = (float) $this->args['gradient_start_position'] . '%';
}
if ( ! $this->is_default( 'gradient_end_position' ) ) {
$custom_vars['button_gradient_end'] = (float) $this->args['gradient_end_position'] . '%';
}
if ( $this->args['gradient_colors'] ) {
// Checking for deprecated separators.
if ( strpos( $this->args['gradient_colors'], ';' ) ) {
$grad_colors = explode( ';', $this->args['gradient_colors'] );
} else {
$grad_colors = explode( '|', $this->args['gradient_colors'] );
}
// Only one, just use that as background color, no gradient.
if ( 1 === count( $grad_colors ) || empty( $grad_colors[1] ) || $grad_colors[0] === $grad_colors[1] ) {
$custom_vars['button_gradient_top_color'] = $grad_colors[0];
$custom_vars['button_gradient_bottom_color'] = $grad_colors[0];
} else {
$custom_vars['button_gradient_top_color'] = $grad_colors[0];
$custom_vars['button_gradient_bottom_color'] = $grad_colors[1];
$this->args['has_gradient'] = true;
if ( 'linear' !== $this->args['gradient_type'] ) {
$custom_vars['button_gradient'] = 'radial-gradient(circle at ' . $this->args['radial_direction'] . ',' . $grad_colors[0] . ' ' . $this->args['gradient_start_position'] . '%,' . $grad_colors[1] . ' ' . $this->args['gradient_end_position'] . '%)';
}
}
}
if ( $this->args['gradient_hover_colors'] ) {
// Checking for deprecated separators.
if ( strpos( $this->args['gradient_hover_colors'], ';' ) ) {
$grad_hover_colors = explode( ';', $this->args['gradient_hover_colors'] );
} else {
$grad_hover_colors = explode( '|', $this->args['gradient_hover_colors'] );
}
if ( 1 === count( $grad_hover_colors ) || '' === $grad_hover_colors[1] || $grad_hover_colors[0] === $grad_hover_colors[1] ) {
$custom_vars['button_gradient_top_color_hover'] = $grad_hover_colors[0];
$custom_vars['button_gradient_bottom_color_hover'] = $grad_hover_colors[0];
} else {
$custom_vars['button_gradient_top_color_hover'] = $grad_hover_colors[0];
$custom_vars['button_gradient_bottom_color_hover'] = $grad_hover_colors[1];
$this->args['has_gradient'] = true;
if ( 'linear' !== $this->args['gradient_type'] ) {
$custom_vars['button_gradient_hover'] = 'radial-gradient(circle at ' . $this->args['radial_direction'] . ',' . $grad_hover_colors[0] . ' ' . $this->args['gradient_start_position'] . '%,' . $grad_hover_colors[1] . ' ' . $this->args['gradient_end_position'] . '%)';
}
}
}
}
}
if ( ! $this->is_default( 'text_transform' ) && '' !== $this->args['text_transform'] ) {
$custom_vars['button_text_transform'] = $this->args['text_transform'];
}
if ( '' === $this->args['size'] ) {
if ( ! $this->is_default( 'font_size' ) ) {
$custom_vars['button_font_size'] = fusion_library()->sanitize->get_value_with_unit( $this->args['font_size'] );
}
if ( ! $this->is_default( 'line_height' ) ) {
$custom_vars['button_line_height'] = $this->args['line_height'];
}
if ( ! $this->is_default( 'padding_top' ) ) {
$custom_vars['button_padding-top'] = fusion_library()->sanitize->get_value_with_unit( $this->args['padding_top'] );
}
if ( ! $this->is_default( 'padding_right' ) ) {
$custom_vars['button_padding-right'] = fusion_library()->sanitize->get_value_with_unit( $this->args['padding_right'] );
}
if ( ! $this->is_default( 'padding_bottom' ) ) {
$custom_vars['button_padding-bottom'] = fusion_library()->sanitize->get_value_with_unit( $this->args['padding_bottom'] );
}
if ( ! $this->is_default( 'padding_left' ) ) {
$custom_vars['button_padding-left'] = fusion_library()->sanitize->get_value_with_unit( $this->args['padding_left'] );
}
}
if ( ! $this->is_default( 'letter_spacing' ) ) {
$custom_vars['button_typography-letter-spacing'] = fusion_library()->sanitize->get_value_with_unit( $this->args['letter_spacing'] );
}
$text_styles = Fusion_Builder_Element_Helper::get_font_styling( $this->args, 'button_font', 'array' );
foreach ( $text_styles as $rule => $value ) {
$custom_vars[ 'button_typography-' . $rule ] = $value;
}
if ( ! $this->is_default( 'margin_top' ) ) {
$custom_vars['button_margin-top'] = fusion_library()->sanitize->get_value_with_unit( $this->args['margin_top'] );
}
if ( ! $this->is_default( 'margin_right' ) ) {
$custom_vars['button_margin-right'] = fusion_library()->sanitize->get_value_with_unit( $this->args['margin_right'] );
}
if ( ! $this->is_default( 'margin_bottom' ) ) {
$custom_vars['button_margin-bottom'] = fusion_library()->sanitize->get_value_with_unit( $this->args['margin_bottom'] );
}
if ( ! $this->is_default( 'margin_left' ) ) {
$custom_vars['button_margin-left'] = fusion_library()->sanitize->get_value_with_unit( $this->args['margin_left'] );
}
return $this->get_custom_css_vars( $custom_vars, false );
}
/**
* Builds the container attributes array.
*
* @access public
* @since 1.0
* @return array
*/
public function container_attr() {
$attr = [
'class' => '',
'style' => '',
];
if ( fusion_element_rendering_is_flex() ) {
if ( ! empty( $this->args['alignment'] ) ) {
$attr['style'] .= 'text-align:' . $this->args['alignment'] . ';';
}
if ( ! empty( $this->args['alignment_medium'] ) && $this->args['alignment'] !== $this->args['alignment_medium'] ) {
$attr['class'] .= ' md-text-align-' . $this->args['alignment_medium'];
}
if ( ! empty( $this->args['alignment_small'] ) && $this->args['alignment'] !== $this->args['alignment_small'] ) {
$attr['class'] .= ' sm-text-align-' . $this->args['alignment_small'];
}
} else {
$attr['class'] = 'fusion-button-wrapper';
// Add wrapper to the button for alignment and scoped styling.
if ( ( ! $this->args['default_stretch'] && 'yes' === $this->args['stretch'] ) || ( $this->args['default_stretch'] && 'yes' === $this->args['default_stretch_value'] ) ) {
$attr['class'] = ' fusion-align-block';
} elseif ( $this->args['alignment'] ) {
$attr['class'] = ' fusion-align' . $this->args['alignment'];
}
}
$attr['class'] = ltrim( $attr['class'] );
return $attr;
}
/**
* Builds the attributes array.
*
* @access public
* @since 1.0
* @return array
*/
public function attr() {
$attr = [];
$size = 'button-' . $this->args['size'];
if ( $this->args['default_size'] ) {
$size = 'fusion-button-default-size';
}
$stretch = 'fusion-button-span-' . $this->args['stretch'];
if ( $this->args['default_stretch'] ) {
$stretch = 'fusion-button-default-span';
}
$type = '';
if ( $this->args['default_type'] ) {
$type = 'fusion-button-default-type';
}
$color_type = $this->args['color'];
if ( 'custom' === $this->args['color'] ) {
$color_type = 'default';
}
$attr['class'] = 'fusion-button button-' . $this->args['type'] . ' ' . $size . ' button-' . $this->args['color'] . ' fusion-button-' . $color_type . ' button-' . $this->element_id . ' ' . $stretch . ' ' . $type;
$attr = fusion_builder_visibility_atts( $this->args['hide_on_mobile'], $attr );
$attr['class'] .= Fusion_Builder_Sticky_Visibility_Helper::get_sticky_class( $this->args['sticky_display'] );
$attr['style'] = $this->get_style_vars();
if ( $this->args['animation_type'] ) {
$attr = Fusion_Builder_Animation_Helper::add_animation_attributes( $this->args, $attr );
}
if ( isset( $this->args['target'] ) ) {
$attr['target'] = $this->args['target'];
if ( '_blank' === $this->args['target'] ) {
$attr['rel'] = 'noopener noreferrer';
} elseif ( 'lightbox' === $this->args['target'] ) {
$attr['rel'] = 'iLightbox';
}
}
if ( 'none' !== $this->args['hover_transition'] ) {
$attr['data-hover'] = $this->args['hover_transition'];
if ( 'icon_position' === $this->args['hover_transition'] && $this->args['icon'] ) {
$attr['class'] .= ' awb-b-icon-pos-' . $this->args['icon_position'];
}
}
// Add additional, custom link attributes correctly formatted to the anchor.
$attr = fusion_get_link_attributes( $this->args, $attr );
if ( isset( $this->args['title'] ) && '' !== $this->args['title'] ) {
$attr['title'] = $this->args['title'];
$attr['aria-label'] = isset( $attr['aria-label'] ) ? $attr['aria-label'] : $attr['title'];
}
if ( '1' === $this->args['aria_role_button'] ) {
$attr['role'] = 'button';
}
if ( isset( $this->args['link'] ) && '' !== $this->args['link'] ) {
$attr['href'] = $this->args['link'];
}
if ( isset( $this->args['modal'] ) && '' !== $this->args['modal'] ) {
$attr['data-toggle'] = 'modal';
$attr['data-target'] = '.fusion-modal.' . $this->args['modal'];
}
if ( ( ! empty( $this->args['margin_right'] ) || ! empty( $this->args['margin_left'] ) ) && ( ! $this->args['default_stretch'] && 'yes' === $this->args['stretch'] ) || ( $this->args['default_stretch'] && 'yes' === $this->args['default_stretch_value'] ) ) {
$margin_right = ! empty( $this->args['margin_right'] ) ? ' - ' . $this->args['margin_right'] : '';
$margin_left = ! empty( $this->args['margin_left'] ) ? ' - ' . $this->args['margin_left'] : '';
$attr['style'] .= 'width:calc(100%' . $margin_right . $margin_left . ');';
}
if ( isset( $this->args['class'] ) && '' !== $this->args['class'] ) {
$attr['class'] .= ' ' . $this->args['class'];
}
if ( isset( $this->args['id'] ) && '' !== $this->args['id'] ) {
$attr['id'] = $this->args['id'];
}
if ( $this->args['has_gradient'] ) {
$attr['class'] .= ' fusion-has-button-gradient';
}
return $attr;
}
/**
* Builds the attributes array.
*
* @access public
* @since 1.0
* @return array
*/
public function icon_divider_attr() {
$attr = [];
$attr['class'] = 'fusion-button-icon-divider button-icon-divider-' . $this->args['icon_position'];
return $attr;
}
/**
* Builds the attributes array.
*
* @access public
* @since 1.0
* @return array
*/
public function icon_attr() {
$attr = [
'class' => fusion_font_awesome_name_handler( $this->args['icon'] ),
'aria-hidden' => 'true',
];
if ( 'yes' !== $this->args['icon_divider'] ) {
$attr['class'] .= ' button-icon-' . $this->args['icon_position'];
}
if ( $this->args['icon_color'] !== $this->args['accent_color'] ) {
$attr['style'] = 'color:' . $this->args['icon_color'] . ';';
}
return $attr;
}
/**
* Builds the attributes array.
*
* @access public
* @since 1.0
* @return array
*/
public function button_text_attr() {
$attr = [
'class' => 'fusion-button-text',
];
if ( $this->args['icon'] && 'yes' === $this->args['icon_divider'] ) {
$attr['class'] = 'fusion-button-text fusion-button-text-' . $this->args['icon_position'];
}
return $attr;
}
/**
* Adds settings to element options panel.
*
* @access public
* @since 1.1
* @return array $sections Button settings.
*/
public function add_options() {
global $dynamic_css_helpers;
$option_name = Fusion_Settings::get_option_name();
$is_builder = ( function_exists( 'fusion_is_preview_frame' ) && fusion_is_preview_frame() ) || ( function_exists( 'fusion_is_builder_frame' ) && fusion_is_builder_frame() );
$main_elements = apply_filters( 'fusion_builder_element_classes', [ '.fusion-button-default' ], '.fusion-button-default' );
$all_elements = array_merge( [ '.fusion-button' ], $main_elements );
$default_size_selector = apply_filters( 'fusion_builder_element_classes', [ ' .fusion-button-default-size' ], '.fusion-button-default-size' );
$quantity_elements = apply_filters( 'fusion_builder_element_classes', [ '.fusion-button-quantity' ], '.fusion-button-quantity' );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-all', Fusion_Dynamic_CSS_Helpers::get_elements_string( $all_elements ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-default-size-default', Fusion_Dynamic_CSS_Helpers::get_elements_string( $default_size_selector ) );
// General 3d styling.
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-3d', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $all_elements, ':not(.button-flat)', '.fusion-button_type-3d' ) ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-3d-active', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $all_elements, ':not(.button-flat):active', '.fusion-button_type-3d' ) ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-3d-hover', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $all_elements, ':not(.button-flat):hover', '.fusion-button_type-3d' ) ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-3d-hover-active', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $all_elements, ':not(.button-flat):hover:active', '.fusion-button_type-3d' ) ) );
// Quantity styling.
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-quantity-default', Fusion_Dynamic_CSS_Helpers::get_elements_string( $quantity_elements ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-quantity-default-qty', Fusion_Dynamic_CSS_Helpers::get_elements_string( $quantity_elements, ' .qty' ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-main-default', Fusion_Dynamic_CSS_Helpers::get_elements_string( $main_elements ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-main-default:hover .fusion-button-text', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $main_elements, ':hover .fusion-button-text', '' ) ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-main-default:focus .fusion-button-text', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $main_elements, ':focus .fusion-button-text', '' ) ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-main-default:active .fusion-button-text', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $main_elements, ':active .fusion-button-text', '' ) ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-main-default .fusion-button-text', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $main_elements, ' .fusion-button-text', '' ) ) );
// Default gradients.
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-main-gradient', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $main_elements, '', '.fusion-has-button-gradient' ) ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-main-radial-gradient', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $main_elements, '', '.fusion-button_gradient-radial' ) ) );
// Hover gradients.
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-main-hover-gradient', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $main_elements, ':hover', '.fusion-has-button-gradient' ) ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-main-radial-hover-gradient', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $main_elements, ':hover', '.fusion-button_gradient-radial' ) ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-main-hover', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $main_elements, ':hover' ) ) );
// Focus gradients.
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-main-focus-gradient', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $main_elements, ':focus', '.fusion-has-button-gradient' ) ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-main-radial-focus-gradient', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $main_elements, ':focus', '.fusion-button_gradient-radial' ) ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-main-focus', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $main_elements, ':focus' ) ) );
// Active gradients.
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-main-active-gradient', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $main_elements, ':active', '.fusion-has-button-gradient' ) ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-main-radial-active-gradient', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $main_elements, ':active', '.fusion-button_gradient-radial' ) ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-main-active', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $main_elements, ':active' ) ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-main-visited', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $main_elements, ':visited' ) ) );
Fusion_Dynamic_CSS::add_replace_pattern( '.fusion-builder-elements-button-main-span-yes', Fusion_Dynamic_CSS_Helpers::get_elements_string( $dynamic_css_helpers->map_selector( $main_elements, ':not(.fusion-button-span-no)', '.fusion-button_span-yes' ) ) );
return [
'button_shortcode_section' => [
'label' => esc_html__( 'Button', 'fusion-builder' ),
'id' => 'button_shortcode_section',
'type' => 'accordion',
'icon' => 'fusiona-check-empty',
'fields' => [
'button_padding' => [
'label' => esc_html__( 'Button Padding', 'Avada' ),
'description' => esc_html__( 'Controls the padding for buttons.', 'Avada' ),
'id' => 'button_padding',
'choices' => [
'top' => true,
'right' => true,
'bottom' => true,
'left' => true,
],
'default' => [
'top' => '13px',
'right' => '29px',
'bottom' => '13px',
'left' => '29px',
],
'type' => 'spacing',
'css_vars' => [
[
'name' => '--button_padding-top',
'choice' => 'top',
],
[
'name' => '--button_padding-bottom',
'choice' => 'bottom',
],
[
'name' => '--button_padding-left',
'choice' => 'left',
],
[
'name' => '--button_padding-right',
'choice' => 'right',
],
],
],
'button_span' => [
'label' => esc_html__( 'Button Span', 'fusion-builder' ),
'description' => esc_html__( 'Controls if the button spans the full width of its container.', 'fusion-builder' ),
'id' => 'button_span',
'default' => 'no',
'type' => 'radio-buttonset',
'choices' => [
'yes' => esc_html__( 'Yes', 'fusion-builder' ),
'no' => esc_html__( 'No', 'fusion-builder' ),
],
'output' => [
[
'element' => 'body',
'function' => 'attr',
'attr' => 'class',
'value_pattern' => 'fusion-button_span-$',
'remove_attrs' => [ 'fusion-button_span-yes', 'fusion-button_span-no' ],
'toLowerCase' => true,
],
],
],
'button_type' => [
'label' => esc_html__( 'Button Type', 'fusion-builder' ),
'description' => esc_html__( 'Controls the default button type.', 'fusion-builder' ),
'id' => 'button_type',
'default' => 'Flat',
'type' => 'radio-buttonset',
'choices' => [
'Flat' => esc_html__( 'Flat', 'fusion-builder' ),
'3d' => esc_html__( '3D', 'fusion-builder' ),
],
'output' => [
[
'element' => 'body',
'function' => 'attr',
'attr' => 'class',
'value_pattern' => 'fusion-button_type-$',
'remove_attrs' => [ 'fusion-button_type-flat', 'fusion-button_type-3d' ],
'toLowerCase' => true,
],
[
'element' => '.fusion-button-default-type',
'function' => 'attr',
'attr' => 'class',
'value_pattern' => 'button-$',
'remove_attrs' => [ 'button-3d', 'button-flat' ],
'toLowerCase' => true,
],
],
],
'button_typography' => [
'id' => 'button_typography',
'label' => esc_html__( 'Button Typography', 'fusion-builder' ),
'description' => esc_html__( 'These settings control the typography for all button text.', 'fusion-builder' ),
'type' => 'typography',
'global' => true,
'choices' => [
'font-family' => true,
'font-size' => true,
'font-weight' => true,
'line-height' => true,
'letter-spacing' => true,
'text-transform' => true,
],
'default' => [
'font-family' => 'var(--awb-typography3-font-family)',
'font-size' => 'var(--awb-typography3-font-size)',
'font-weight' => '600',
'line-height' => 'var(--awb-typography3-line-height)',
'letter-spacing' => 'var(--awb-typography3-letter-spacing)',
'text-transform' => 'var(--awb-typography3-text-transform)',
],
'css_vars' => [
[
'name' => '--button_typography-font-family',
'choice' => 'font-family',
'callback' => [ 'combined_font_family', 'button_typography' ],
],
[
'name' => '--button_typography-font-weight',
'choice' => 'font-weight',
'callback' => [ 'font_weight_no_regular', '' ],
],
[
'name' => '--button_typography-letter-spacing',
'choice' => 'letter-spacing',
'callback' => [ 'maybe_append_px', '' ],
],
[
'name' => '--button_typography-font-style',
'choice' => 'font-style',
],
[
'name' => '--button_font_size',
'choice' => 'font-size',
],
[
'name' => '--button_line_height',
'choice' => 'line-height',
],
[
'name' => '--button_text_transform',
'choice' => 'text-transform',
],
],
],
'button_gradient_top_color' => [
'label' => esc_html__( 'Button Gradient Start Color', 'fusion-builder' ),
'description' => esc_html__( 'Controls the start color of the button background.', 'fusion-builder' ),
'id' => 'button_gradient_top_color',
'default' => 'var(--awb-color5)',
'type' => 'color-alpha',
'css_vars' => [
[
'name' => '--button_gradient_top_color',
'callback' => [ 'sanitize_color' ],
],
],
'output' => [
[
'element' => 'helperElement',
'property' => 'dummy',
'callback' => [
'toggle_class',
[
'condition' => [ 'button_gradient_bottom_color', 'not-equal-to-option' ],
'element' => 'body',
'className' => 'fusion-has-button-gradient',
],
],
'sanitize_callback' => '__return_empty_string',
],
],
],
'button_gradient_bottom_color' => [
'label' => esc_html__( 'Button Gradient End Color', 'fusion-builder' ),
'description' => esc_html__( 'Controls the end color of the button background.', 'fusion-builder' ),
'id' => 'button_gradient_bottom_color',
'default' => 'var(--awb-color5)',
'type' => 'color-alpha',
'css_vars' => [
[
'name' => '--button_gradient_bottom_color',
'callback' => [ 'sanitize_color' ],
],
],
],
'button_gradient_top_color_hover' => [
'label' => esc_html__( 'Button Gradient Start Hover Color', 'fusion-builder' ),
'description' => esc_html__( 'Controls the start hover color of the button background.', 'fusion-builder' ),
'id' => 'button_gradient_top_color_hover',
'default' => 'hsla(var(--awb-color5-h),calc(var(--awb-color5-s) - 5%),calc(var(--awb-color5-l) - 10%),var(--awb-color5-a))',
'type' => 'color-alpha',
'css_vars' => [
[
'name' => '--button_gradient_top_color_hover',
'callback' => [ 'sanitize_color' ],
],
],
'preview' => [
'selector' => '.fusion-button,.fusion-button .wpcf7-submit',
'type' => 'class',
'toggle' => 'hover',
],
],
'button_gradient_bottom_color_hover' => [
'label' => esc_html__( 'Button Gradient End Hover Color', 'fusion-builder' ),
'description' => esc_html__( 'Controls the end hover color of the button background.', 'fusion-builder' ),
'id' => 'button_gradient_bottom_color_hover',
'default' => 'hsla(var(--awb-color5-h),calc(var(--awb-color5-s) - 5%),calc(var(--awb-color5-l) - 10%),var(--awb-color5-a))',
'type' => 'color-alpha',
'preview' => [
'selector' => '.fusion-button,.fusion-button .wpcf7-submit',
'type' => 'class',
'toggle' => 'hover',
],
'css_vars' => [
[
'name' => '--button_gradient_bottom_color_hover',
'callback' => [ 'sanitize_color' ],
],
],
],
'button_gradient_start' => [
'label' => esc_html__( 'Button Gradient Start', 'fusion-builder' ),
'description' => esc_html__( 'Controls the start position for the gradient.', 'fusion-builder' ),
'id' => 'button_gradient_start',
'default' => '0',
'type' => 'slider',
'choices' => [
'min' => '0',
'max' => '100',
'step' => '1',
],
'css_vars' => [
[
'name' => '--button_gradient_start',
'value_pattern' => '$%',
],
],
],
'button_gradient_end' => [
'label' => esc_html__( 'Button Gradient End', 'fusion-builder' ),
'description' => esc_html__( 'Controls the end position for the gradient.', 'fusion-builder' ),
'id' => 'button_gradient_end',
'default' => '100',
'type' => 'slider',
'choices' => [
'min' => '0',
'max' => '100',
'step' => '1',
],
'css_vars' => [
[
'name' => '--button_gradient_end',
'value_pattern' => '$%',
],
],
],
'button_gradient_type' => [
'label' => esc_html__( 'Button Gradient Type', 'fusion-builder' ),
'description' => esc_html__( 'Controls the type of gradient.', 'fusion-builder' ),
'id' => 'button_gradient_type',
'default' => 'linear',
'type' => 'radio-buttonset',
'choices' => [
'linear' => esc_html__( 'Linear', 'fusion-builder' ),
'radial' => esc_html__( 'Radial', 'fusion-builder' ),
],
'output' => [
[
'element' => 'body',
'function' => 'attr',
'attr' => 'class',
'value_pattern' => 'fusion-button_gradient-$',
'remove_attrs' => [ 'fusion-button_gradient-linear', 'fusion-button_gradient-radial' ],
'toLowerCase' => true,
],
],
],
'button_gradient_angle' => [
'label' => esc_html__( 'Button Gradient Angle', 'fusion-builder' ),
'description' => esc_html__( 'Controls the angle for the linear gradient.', 'fusion-builder' ),
'id' => 'button_gradient_angle',
'default' => '180',
'type' => 'slider',
'soft_dependency' => true,
'choices' => [
'min' => '0',
'max' => '360',
'step' => '1',
],
'css_vars' => [
[
'name' => '--button_gradient_angle',
'value_pattern' => '$deg',
],
],
],
'button_radial_direction' => [
'label' => esc_html__( 'Button Radial Direction', 'fusion-builder' ),
'description' => esc_html__( 'Select direction for radial gradient.', 'fusion-builder' ),
'id' => 'button_radial_direction',
'default' => 'center center',
'type' => 'select',
'soft_dependency' => true,
'choices' => [
'left top' => esc_attr__( 'Left Top', 'fusion-builder' ),
'left center' => esc_attr__( 'Left Center', 'fusion-builder' ),
'left bottom' => esc_attr__( 'Left Bottom', 'fusion-builder' ),
'right top' => esc_attr__( 'Right Top', 'fusion-builder' ),
'right center' => esc_attr__( 'Right Center', 'fusion-builder' ),
'right bottom' => esc_attr__( 'Right Bottom', 'fusion-builder' ),
'center top' => esc_attr__( 'Center Top', 'fusion-builder' ),
'center center' => esc_attr__( 'Center Center', 'fusion-builder' ),
'center bottom' => esc_attr__( 'Center Bottom', 'fusion-builder' ),
],
'css_vars' => [
[
'name' => '--button_radial_direction',
],
],
],
'button_accent_color' => [
'label' => esc_html__( 'Button Text Color', 'fusion-builder' ),
'description' => esc_html__( 'Controls the color of the button text, divider and icon.', 'fusion-builder' ),
'id' => 'button_accent_color',
'default' => 'var(--awb-color1)',
'type' => 'color-alpha',
'css_vars' => [
[
'name' => '--button_accent_color',
'callback' => [ 'sanitize_color' ],
],
],
],
'button_accent_hover_color' => [
'label' => esc_html__( 'Button Text Hover Color', 'fusion-builder' ),
'description' => esc_html__( 'Controls the hover color of the button text, divider and icon.', 'fusion-builder' ),
'id' => 'button_accent_hover_color',
'default' => 'var(--awb-color1)',
'type' => 'color-alpha',
'css_vars' => [
[
'name' => '--button_accent_hover_color',
'callback' => [ 'sanitize_color' ],
],
],
'preview' => [
'selector' => '.fusion-button,.fusion-button .wpcf7-submit',
'type' => 'class',
'toggle' => 'hover',
],
],
'button_bevel_color' => [
'label' => esc_html__( 'Button Bevel Color For 3D Mode', 'fusion-builder' ),
'description' => esc_html__( 'Controls the bevel color of the buttons when using 3D button type.', 'fusion-builder' ),
'id' => 'button_bevel_color',
'default' => 'hsla(var(--awb-color5-h),calc(var(--awb-color5-s) - 5%),calc(var(--awb-color5-l) - 10%),var(--awb-color5-a))',
'type' => 'color-alpha',
'css_vars' => [
[
'name' => '--button_bevel_color',
'callback' => [ 'sanitize_color' ],
],
[
'name' => '--button_box_shadow',
'callback' => [
'conditional_return_value',
[
'value_pattern' => [ 'inset 0px 1px 0px #ffffff, 0px 3px 0px $, 1px 5px 5px 3px rgba(0, 0, 0, 0.3)', 'none' ],
'conditions' => [
[ 'button_type', '===', '3d' ],
],
],
],
],
],
],
'button_bevel_color_hover' => [
'label' => esc_html__( 'Button Hover Bevel Color For 3D Mode', 'fusion-builder' ),
'description' => esc_html__( 'Controls the hover bevel color of the buttons when using 3D button type.', 'fusion-builder' ),
'id' => 'button_bevel_color_hover',
'default' => 'hsla(var(--awb-color5-h),calc(var(--awb-color5-s) - 5%),calc(var(--awb-color5-l) - 10%),var(--awb-color5-a))',
'type' => 'color-alpha',
'css_vars' => [
[
'name' => '--button_bevel_color_hover',
'callback' => [ 'sanitize_color' ],
],
],
],
'button_border_width' => [
'label' => esc_html__( 'Button Border Size', 'fusion-builder' ),
'description' => esc_html__( 'Controls the border size for buttons.', 'fusion-builder' ),
'id' => 'button_border_width',
'choices' => [
'top' => true,
'right' => true,
'bottom' => true,
'left' => true,
],
'default' => [
'top' => '0px',
'bottom' => '0px',
'left' => '0px',
'right' => '0px',
],
'type' => 'spacing',
'css_vars' => [
[
'name' => '--button_border_width-top',
'choice' => 'top',
'po' => false,
],
[
'name' => '--button_border_width-right',
'choice' => 'right',
'po' => false,
],
[
'name' => '--button_border_width-bottom',
'choice' => 'bottom',
'po' => false,
],
[
'name' => '--button_border_width-left',
'choice' => 'left',
'po' => false,
],
],
],
'button_border_radius' => [
'type' => 'border_radius',
'label' => esc_html__( 'Button Border Radius', 'fusion-builder' ),
'description' => esc_html__( 'Controls the border radius for buttons.', 'Avada' ),
'id' => 'button_border_radius',
'choices' => [
'top_left' => true,
'top_right' => true,
'bottom_right' => true,
'bottom_left' => true,
'units' => [ 'px', '%', 'em' ],
],
'default' => [
'top_left' => '4px',
'top_right' => '4px',
'bottom_right' => '4px',
'bottom_left' => '4px',
],
'css_vars' => [
[
'name' => '--button-border-radius-top-left',
'choice' => 'top_left',
'element' => 'body',
],
[
'name' => '--button-border-radius-top-right',
'choice' => 'top_right',
'element' => 'body',
],
[
'name' => '--button-border-radius-bottom-right',
'choice' => 'bottom_right',
'element' => 'body',
],
[
'name' => '--button-border-radius-bottom-left',
'choice' => 'bottom_left',
'element' => 'body',
],
],
],
'button_border_color' => [
'label' => esc_html__( 'Button Border Color', 'fusion-builder' ),
'description' => esc_html__( 'Controls the border color for buttons.', 'fusion-builder' ),
'id' => 'button_border_color',
'default' => 'var(--awb-color1)',
'type' => 'color-alpha',
'css_vars' => [
[
'name' => '--button_border_color',
'callback' => [ 'sanitize_color' ],
],
],
],
'button_border_hover_color' => [
'label' => esc_html__( 'Button Border Hover Color', 'fusion-builder' ),
'description' => esc_html__( 'Controls the hover border color of the button.', 'fusion-builder' ),
'id' => 'button_border_hover_color',
'default' => 'var(--awb-color1)',
'type' => 'color-alpha',
'css_vars' => [
[
'name' => '--button_border_hover_color',
'callback' => [ 'sanitize_color' ],
],
],
],
'button_presets' => [
'label' => esc_html__( 'Legacy Button Presets', 'Avada' ),
'description' => esc_html__( 'Select if you would like to enable legacy color presets.', 'Avada' ),
'id' => 'button_presets',
'default' => '0',
'type' => 'switch',
// No need to refresh the page.
'transport' => 'postMessage',
],
],
],
];
}
/**
* Sets the necessary scripts.
*
* @access public
* @since 3.2
* @return void
*/
public function on_first_render() {
Fusion_Dynamic_JS::enqueue_script( 'fusion-button' );
}
/**
* Load base CSS.
*
* @access public
* @since 3.0
* @return void
*/
public function add_css_files() {
$fusion_settings = awb_get_fusion_settings();
FusionBuilder()->add_element_css( FUSION_BUILDER_PLUGIN_DIR . 'assets/css/shortcodes/button.min.css' );
if ( defined( 'LS_PLUGIN_SLUG' ) || defined( 'RS_PLUGIN_PATH' ) ) {
FusionBuilder()->add_element_css( FUSION_BUILDER_PLUGIN_DIR . 'assets/css/shortcodes/button-sliders.min.css' );
}
if ( apply_filters( 'awb_load_button_presets', ( '1' === $fusion_settings->get( 'button_presets' ) ) ) ) {
FusionBuilder()->add_element_css( FUSION_BUILDER_PLUGIN_DIR . 'assets/css/shortcodes/button-presets.min.css' );
}
}
}
}
new FusionSC_Button();
}
/**
* Map shortcode to Avada Builder.
*
* @since 1.0
*/
function fusion_element_button() {
$fusion_settings = awb_get_fusion_settings();
$standard_schemes = [
'default' => esc_attr__( 'Default', 'fusion-builder' ),
'custom' => esc_attr__( 'Custom', 'fusion-builder' ),
];
$style_option = 'radio_button_set';
if ( apply_filters( 'awb_load_button_presets', ( '1' === $fusion_settings->get( 'button_presets' ) ) ) ) {
$style_option = 'select';
$standard_schemes = [
'default' => esc_attr__( 'Default', 'fusion-builder' ),
'custom' => esc_attr__( 'Custom', 'fusion-builder' ),
'green' => esc_attr__( 'Green', 'fusion-builder' ),
'darkgreen' => esc_attr__( 'Dark Green', 'fusion-builder' ),
'orange' => esc_attr__( 'Orange', 'fusion-builder' ),
'blue' => esc_attr__( 'Blue', 'fusion-builder' ),
'red' => esc_attr__( 'Red', 'fusion-builder' ),
'pink' => esc_attr__( 'Pink', 'fusion-builder' ),
'darkgray' => esc_attr__( 'Dark Gray', 'fusion-builder' ),
'lightgray' => esc_attr__( 'Light Gray', 'fusion-builder' ),
];
}
fusion_builder_map(
fusion_builder_frontend_data(
'FusionSC_Button',
[
'name' => esc_attr__( 'Button', 'fusion-builder' ),
'shortcode' => 'fusion_button',
'icon' => 'fusiona-check-empty',
'preview' => FUSION_BUILDER_PLUGIN_DIR . 'inc/templates/previews/fusion-button-preview.php',
'preview_id' => 'fusion-builder-block-module-button-preview-template',
'help_url' => 'https://avada.com/documentation/button-element/',
'inline_editor' => true,
'subparam_map' => [
'fusion_font_family_button_font' => 'main_typography',
'fusion_font_variant_button_font' => 'main_typography',
'font_size' => 'main_typography',
'line_height' => 'main_typography',
'letter_spacing' => 'main_typography',
'text_transform' => 'main_typography',
],
'params' => [
[
'type' => 'link_selector',
'heading' => esc_attr__( 'Button URL', 'fusion-builder' ),
'param_name' => 'link',
'value' => '',
'description' => esc_attr__( "Add the button's url ex: http://example.com.", 'fusion-builder' ),
'dynamic_data' => true,
],
[
'type' => 'textfield',
'heading' => esc_attr__( 'Button Text', 'fusion-builder' ),
'param_name' => 'element_content',
'value' => esc_attr__( 'Button Text', 'fusion-builder' ),
'description' => esc_attr__( 'Add the text that will display on button.', 'fusion-builder' ),
'dynamic_data' => true,
],
[
'type' => 'textfield',
'heading' => esc_attr__( 'Button Title / ARIA Label Attribute', 'fusion-builder' ),
'param_name' => 'title',
'value' => '',
'description' => esc_attr__( 'Set a title and aria-label attribute for the button.', 'fusion-builder' ),
'dynamic_data' => true,
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Button Target', 'fusion-builder' ),
'description' => esc_attr__( '_self = open in same browser tab, _blank = open in new browser tab.', 'fusion-builder' ),
'param_name' => 'target',
'default' => '_self',
'value' => [
'_self' => esc_attr__( '_self', 'fusion-builder' ),
'_blank' => esc_attr__( '_blank', 'fusion-builder' ),
'lightbox' => esc_attr__( 'Lightbox', 'fusion-builder' ),
],
],
[
'type' => 'textfield',
'heading' => esc_attr__( 'Button Additional Attributes', 'fusion-builder' ),
'param_name' => 'link_attributes',
'value' => '',
'description' => esc_attr__( "Add additional attributes to the anchor tag. Separate attributes with a whitespace and use single quotes on the values, doubles don't work. If you need to add square brackets, [ ], to your attributes, please use curly brackets, { }, instead. They will be replaced correctly on the frontend. ex: rel='nofollow'.", 'fusion-builder' ),
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Enable ARIA Role Button', 'fusion-builder' ),
'description' => esc_attr__( 'Turn on for accessibility reasons, if your button does not use standard link behaviour, but triggers an action like opening an Off-Canvas or a Modal.', 'fusion-builder' ),
'param_name' => 'aria_role_button',
'default' => '0',
'value' => [
'1' => esc_attr__( 'On', 'fusion-builder' ),
'0' => esc_attr__( 'Off', 'fusion-builder' ),
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Alignment', 'fusion-builder' ),
'description' => esc_attr__( "Select the button's alignment.", 'fusion-builder' ),
'param_name' => 'alignment',
'default' => '',
'responsive' => [
'state' => 'large',
],
'value' => [
'' => esc_attr__( 'Text Flow', 'fusion-builder' ),
'left' => esc_attr__( 'Left', 'fusion-builder' ),
'center' => esc_attr__( 'Center', 'fusion-builder' ),
'right' => esc_attr__( 'Right', 'fusion-builder' ),
],
],
[
'type' => 'textfield',
'heading' => esc_attr__( 'Modal Window Anchor', 'fusion-builder' ),
'param_name' => 'modal',
'value' => '',
'description' => __( 'Add the class name of the modal window you want to open on button click. <strong>NOTE:</strong> The corresponding Modal Element must be added to the same page.', 'fusion-builder' ),
'dynamic_data' => true,
],
[
'type' => $style_option,
'heading' => esc_attr__( 'Button Style', 'fusion-builder' ),
'description' => $fusion_settings->get( 'button_presets' ) ? esc_attr__( 'Select the button\'s color. Select default or specific color name to use Global Options presets, or select custom to use advanced color options below.', 'fusion-builder' ) : esc_attr__( 'Select the button\'s color. Select default to use Global Options values, or custom to use advanced color options below.', 'fusion-builder' ),
'param_name' => 'color',
'default' => 'default',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'value' => $standard_schemes,
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Gradient Start Color', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the start color of the button background.', 'fusion-builder' ),
'param_name' => 'button_gradient_top_color',
'value' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'default' => $fusion_settings->get( 'button_gradient_top_color' ),
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
'states' => [
'hover' => [
'label' => __( 'Hover', 'fusion-builder' ),
'default' => $fusion_settings->get( 'button_gradient_top_color_hover' ),
'preview' => [
'selector' => '.fusion-button',
'type' => 'class',
'toggle' => 'hover',
],
],
],
'connect-state' => [ 'button_gradient_bottom_color', 'accent_color', 'border_color' ],
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Gradient End Color', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the end color of the button background.', 'fusion-builder' ),
'param_name' => 'button_gradient_bottom_color',
'value' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'default' => $fusion_settings->get( 'button_gradient_bottom_color' ),
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
'states' => [
'hover' => [
'label' => __( 'Hover', 'fusion-builder' ),
'default' => $fusion_settings->get( 'button_gradient_bottom_color_hover' ),
'preview' => [
'selector' => '.fusion-button',
'type' => 'class',
'toggle' => 'hover',
],
],
],
'connect-state' => [ 'button_gradient_top_color', 'accent_color', 'border_color' ],
],
[
'type' => 'range',
'heading' => esc_attr__( 'Gradient Start Position', 'fusion-builder' ),
'description' => esc_attr__( 'Select start position for gradient.', 'fusion-builder' ),
'param_name' => 'gradient_start_position',
'default' => $fusion_settings->get( 'button_gradient_start' ),
'value' => '',
'min' => '0',
'max' => '100',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'range',
'heading' => esc_attr__( 'Gradient End Position', 'fusion-builder' ),
'description' => esc_attr__( 'Select end position for gradient.', 'fusion-builder' ),
'param_name' => 'gradient_end_position',
'default' => $fusion_settings->get( 'button_gradient_end' ),
'value' => '',
'min' => '0',
'max' => '100',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Gradient Type', 'fusion-builder' ),
'description' => esc_attr__( 'Controls gradient type.', 'fusion-builder' ),
'param_name' => 'gradient_type',
'default' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'value' => [
'' => esc_attr__( 'Default', 'fusion-builder' ),
'linear' => esc_attr__( 'Linear', 'fusion-builder' ),
'radial' => esc_attr__( 'Radial', 'fusion-builder' ),
],
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'select',
'heading' => esc_attr__( 'Radial Direction', 'fusion-builder' ),
'description' => esc_attr__( 'Select direction for radial gradient.', 'fusion-builder' ),
'param_name' => 'radial_direction',
'default' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'value' => [
'' => esc_attr__( 'Default', 'fusion-builder' ),
'left top' => esc_attr__( 'Left Top', 'fusion-builder' ),
'left center' => esc_attr__( 'Left Center', 'fusion-builder' ),
'left bottom' => esc_attr__( 'Left Bottom', 'fusion-builder' ),
'right top' => esc_attr__( 'Right Top', 'fusion-builder' ),
'right center' => esc_attr__( 'Right Center', 'fusion-builder' ),
'right bottom' => esc_attr__( 'Right Bottom', 'fusion-builder' ),
'center top' => esc_attr__( 'Center Top', 'fusion-builder' ),
'center center' => esc_attr__( 'Center Center', 'fusion-builder' ),
'center bottom' => esc_attr__( 'Center Bottom', 'fusion-builder' ),
],
'dependency' => [
[
'element' => 'gradient_type',
'value' => 'linear',
'operator' => '!=',
],
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'range',
'heading' => esc_attr__( 'Gradient Angle', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the gradient angle. In degrees.', 'fusion-builder' ),
'param_name' => 'linear_angle',
'default' => $fusion_settings->get( 'button_gradient_angle' ),
'value' => '',
'min' => '',
'max' => '360',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'dependency' => [
[
'element' => 'gradient_type',
'value' => 'radial',
'operator' => '!=',
],
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Button Text Color', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the color of the button text, divider and icon.', 'fusion-builder' ),
'param_name' => 'accent_color',
'value' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'default' => $fusion_settings->get( 'button_accent_color' ),
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
'states' => [
'hover' => [
'label' => __( 'Hover', 'fusion-builder' ),
'param_name' => 'accent_hover_color',
'preview' => [
'selector' => '.fusion-button',
'type' => 'class',
'toggle' => 'hover',
],
],
],
'connect-state' => [ 'button_gradient_top_color', 'button_gradient_bottom_color', 'border_color' ],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Button Type', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the button type.', 'fusion-builder' ),
'param_name' => 'type',
'default' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'value' => [
'' => esc_attr__( 'Default', 'fusion-builder' ),
'flat' => esc_attr__( 'Flat', 'fusion-builder' ),
'3d' => esc_attr__( '3D', 'fusion-builder' ),
],
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Button Bevel Color For 3D Mode', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the bevel color of the button when using 3D button type.', 'fusion-builder' ),
'param_name' => 'bevel_color',
'value' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'default' => $fusion_settings->get( 'button_bevel_color' ),
'dependency' => [
[
'element' => 'type',
'value' => 'flat',
'operator' => '!=',
],
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Button Hover Bevel Color For 3D Mode', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the hover bevel color of the button when using 3D button type.', 'fusion-builder' ),
'param_name' => 'bevel_color_hover',
'value' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'default' => $fusion_settings->get( 'button_bevel_color_hover' ),
'dependency' => [
[
'element' => 'type',
'value' => 'flat',
'operator' => '!=',
],
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'dimension',
'remove_from_atts' => true,
'heading' => esc_attr__( 'Button Border Size', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the border size. In pixels or percentage, ex: 10px or 10%.', 'fusion-builder' ),
'param_name' => 'border_width',
'value' => [
'border_top' => '',
'border_right' => '',
'border_bottom' => '',
'border_left' => '',
],
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'dimension',
'remove_from_atts' => true,
'heading' => esc_html__( 'Button Border Radius', 'fusion-builder' ),
'description' => esc_html__( 'Controls the border radius. Enter values including any valid CSS unit, ex: 10px.', 'fusion-builder' ),
'param_name' => 'border_radius',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'value' => [
'border_radius_top_left' => '',
'border_radius_top_right' => '',
'border_radius_bottom_right' => '',
'border_radius_bottom_left' => '',
],
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Button Border Color', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the border color of the button.', 'fusion-builder' ),
'param_name' => 'border_color',
'value' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'default' => $fusion_settings->get( 'button_border_color' ),
'dependency' => [
[
'element' => 'color',
'value' => 'custom',
'operator' => '==',
],
],
'states' => [
'hover' => [
'label' => __( 'Hover', 'fusion-builder' ),
'param_name' => 'border_hover_color',
'preview' => [
'selector' => '.fusion-button',
'type' => 'class',
'toggle' => 'hover',
],
],
],
'connect-state' => [ 'button_gradient_top_color', 'button_gradient_bottom_color', 'accent_color' ],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Button Size', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the button size.', 'fusion-builder' ),
'param_name' => 'size',
'default' => '',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'value' => [
'' => esc_attr__( 'Custom', 'fusion-builder' ),
'small' => esc_attr__( 'Small', 'fusion-builder' ),
'medium' => esc_attr__( 'Medium', 'fusion-builder' ),
'large' => esc_attr__( 'Large', 'fusion-builder' ),
'xlarge' => esc_attr__( 'XLarge', 'fusion-builder' ),
],
],
[
'type' => 'dimension',
'remove_from_atts' => true,
'heading' => esc_attr__( 'Padding', 'fusion-builder' ),
'description' => esc_attr__( 'Controls the padding for the button.', 'fusion-builder' ),
'param_name' => 'padding',
'group' => esc_html__( 'Design', 'fusion-builder' ),
'value' => [
'padding_top' => '',
'padding_right' => '',
'padding_bottom' => '',
'padding_left' => '',
],
'dependency' => [
[
'element' => 'size',
'value' => '',
'operator' => '==',
],
],
],
[
'type' => 'typography',
'remove_from_atts' => true,
'global' => true,
'heading' => esc_attr__( 'Typography', 'fusion-builder' ),
/* translators: URL for the link. */
'description' => esc_html__( 'Controls the button typography, if left empty will inherit from globals.', 'fusion-builder' ),
'param_name' => 'main_typography',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'choices' => [
'font-family' => 'button_font',
'font-size' => 'font_size',
'line-height' => 'line_height',
'letter-spacing' => 'letter_spacing',
'text-transform' => 'text_transform',
],
'default' => [
'font-family' => '',
'variant' => '',
'font-size' => '',
'line-height' => '',
'letter-spacing' => '',
'text-transform' => '',
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Button Span', 'fusion-builder' ),
'description' => esc_attr__( 'Controls if the button spans the full width of its container.', 'fusion-builder' ),
'param_name' => 'stretch',
'default' => 'default',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'value' => [
'default' => esc_attr__( 'Default', 'fusion-builder' ),
'yes' => esc_attr__( 'Yes', 'fusion-builder' ),
'no' => esc_attr__( 'No', 'fusion-builder' ),
],
],
'fusion_margin_placeholder' => [
'param_name' => 'margin',
'value' => [
'margin_top' => '',
'margin_right' => '',
'margin_bottom' => '',
'margin_left' => '',
],
],
[
'type' => 'iconpicker',
'heading' => esc_attr__( 'Icon', 'fusion-builder' ),
'param_name' => 'icon',
'value' => '',
'description' => esc_attr__( 'Click an icon to select, click again to deselect.', 'fusion-builder' ),
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'dynamic_data' => true,
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Icon Position', 'fusion-builder' ),
'description' => esc_attr__( 'Choose the position of the icon on the button.', 'fusion-builder' ),
'param_name' => 'icon_position',
'value' => [
'left' => esc_attr__( 'Left', 'fusion-builder' ),
'right' => esc_attr__( 'Right', 'fusion-builder' ),
],
'default' => 'left',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'dependency' => [
[
'element' => 'icon',
'value' => '',
'operator' => '!=',
],
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Icon Divider', 'fusion-builder' ),
'description' => esc_attr__( 'Choose to display a divider between icon and text.', 'fusion-builder' ),
'param_name' => 'icon_divider',
'default' => 'no',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'dependency' => [
[
'element' => 'icon',
'value' => '',
'operator' => '!=',
],
],
'value' => [
'yes' => esc_attr__( 'Yes', 'fusion-builder' ),
'no' => esc_attr__( 'No', 'fusion-builder' ),
],
],
[
'type' => 'select',
'heading' => esc_attr__( 'Hover Transition', 'fusion-builder' ),
'description' => esc_attr__( 'Set the transition on hover. Icon effects will only work when an icon is set, icon position switch will only work without icon dividers.', 'fusion-builder' ),
'param_name' => 'hover_transition',
'default' => 'none',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'value' => [
'none' => esc_attr__( 'None', 'fusion-builder' ),
'text_slide_up' => esc_attr__( 'Text Slide Up', 'fusion-builder' ),
'text_slide_down' => esc_attr__( 'Text Slide Down', 'fusion-builder' ),
'underline' => esc_attr__( 'Underline', 'fusion-builder' ),
'icon_slide' => esc_attr__( 'Icon Slide', 'fusion-builder' ),
'icon_position' => esc_attr__( 'Icon Switch Position', 'fusion-builder' ),
'icon_rotate' => esc_attr__( 'Icon Rotate', 'fusion-builder' ),
'bg_slide_right' => esc_attr__( 'Background Slide Right', 'fusion-builder' ),
'bg_slide_left' => esc_attr__( 'Background Slide Left', 'fusion-builder' ),
],
],
'fusion_animation_placeholder' => [
'preview_selector' => '.fusion-button',
],
[
'type' => 'checkbox_button_set',
'heading' => esc_attr__( 'Element Visibility', 'fusion-builder' ),
'param_name' => 'hide_on_mobile',
'value' => fusion_builder_visibility_options( 'full' ),
'default' => fusion_builder_default_visibility( 'array' ),
'description' => esc_attr__( 'Choose to show or hide the element on small, medium or large screens. You can choose more than one at a time.', 'fusion-builder' ),
],
'fusion_sticky_visibility_placeholder' => [],
[
'type' => 'textfield',
'heading' => esc_attr__( 'CSS Class', 'fusion-builder' ),
'param_name' => 'class',
'value' => '',
'description' => esc_attr__( 'Add a class to the wrapping HTML element.', 'fusion-builder' ),
],
[
'type' => 'textfield',
'heading' => esc_attr__( 'CSS ID', 'fusion-builder' ),
'param_name' => 'id',
'value' => '',
'description' => esc_attr__( 'Add an ID to the wrapping HTML element.', 'fusion-builder' ),
],
],
]
)
);
}
add_action( 'fusion_builder_before_init', 'fusion_element_button' );