assets = new Assets();
$this->helper = new Helper();
$this->controls = new CHelper($this);
$this->assets->fancy_text_style();
$this->assets->fancy_text_script();
}
/**
* Get widget name
*
* @since 1.0.0
*
* @return string Widget name
*/
public function get_name()
{
return 'afeb_fancy_text';
}
/**
* Get widget title
*
* @since 1.0.0
*
* @return string Widget title
*/
public function get_title()
{
return esc_html__('Fancy Text', 'addons-for-elementor-builder');
}
/**
* Get widget icon
*
* @since 1.0.0
*
* @return string Widget icon
*/
public function get_icon()
{
return 'afeb-iconsvg-fancy-text';
}
/**
* Get widget categories
*
* @since 1.0.0
*
* @return array Widget categories
*/
public function get_categories()
{
return ['afeb_basic'];
}
/**
* Get widget keywords
*
* @since 1.0.0
*
* @return array Widget keywords
*/
public function get_keywords()
{
return ['fancy_text', 'fancy text', esc_html__('Fancy Text', 'addons-for-elementor-builder')];
}
/**
* Register FancyText widget controls
*
* @since 1.0.0
*/
public function register_controls()
{
$this->helper->add_cnt_sctn($this, 'cs1', esc_html__('Fancy Text', 'addons-for-elementor-builder'), function ($obj) {
$this->helper->txt($obj, 'ft_prfx_txt', esc_html__('Prefix Text', 'addons-for-elementor-builder'), esc_html__('This is the ', 'addons-for-elementor-builder'));
$items = new Repeater();
$this->helper->txt($items, 'txt', esc_html__('Text', 'addons-for-elementor-builder'), esc_html__('First string', 'addons-for-elementor-builder'));
$this->helper->rptr($obj, 'ft_fnctxt', $items->get_controls(), [['txt' => esc_html__('First string', 'addons-for-elementor-builder')]], 'txt');
$this->helper->txt($obj, 'ft_sfx_txt', 'Suffix Text', 'of the sentence.');
});
$this->helper->add_cnt_sctn($this, 'cs2', esc_html__('Settings', 'addons-for-elementor-builder'), function ($obj) {
$this->helper->falmnt($obj, 'ft_almnt', '{{WRAPPER}} .afeb-fancy-text');
$this->helper->slct($obj, 'ft_efct', esc_html__('Effect', 'addons-for-elementor-builder'), [
'typing' => esc_html__('Typing', 'addons-for-elementor-builder'),
'rotate-1' => esc_html__('Skew', 'addons-for-elementor-builder'),
// 'rotate-2' => esc_html__('Flip VR', 'addons-for-elementor-builder'),
// 'rotate-3' => esc_html__('Flip HR', 'addons-for-elementor-builder'),
'slide' => esc_html__('Slide', 'addons-for-elementor-builder'),
'clip' => esc_html__('Clip', 'addons-for-elementor-builder'),
'zoom' => esc_html__('Zoom', 'addons-for-elementor-builder'),
// 'scale' => esc_html__('Scale', 'addons-for-elementor-builder'),
'push' => esc_html__('Push', 'addons-for-elementor-builder')
], 'typing');
$this->helper->slct($obj, 'ft_crsr', esc_html__('Cursor', 'addons-for-elementor-builder'), [
'_' => esc_html__('Underline', 'addons-for-elementor-builder'),
'|' => esc_html__('Pipe', 'addons-for-elementor-builder'),
'custom' => esc_html__('Custom', 'addons-for-elementor-builder')
], '_', ['ft_efct' => ['typing', 'clip']]);
$this->helper->txt($obj, 'ft_cstm_crsr', esc_html__('Custom Cursor', 'addons-for-elementor-builder'), '', '', 'dai', ['ft_efct' => ['typing', 'clip'], 'ft_crsr' => 'custom']);
$this->helper->num($obj, 'ft_anim_dur', esc_html__('Animation Duration', 'addons-for-elementor-builder'), 0.1, 8, 0.1, 0.2, '', '', ['ft_efct' => ['typing', 'clip']]);
$this->helper->num($obj, 'ft_anim_dly', esc_html__('Animation Delay', 'addons-for-elementor-builder'), 0.1, 8, 0.1, 2);
$this->HTML_TG = [
'h1' => 'H1',
'h2' => 'H2',
'h3' => 'H3',
'h4' => 'H4',
'h5' => 'H5',
'h6' => 'H6',
'span' => 'SPAN',
'div' => 'DIV',
'p' => 'P'
];
$this->helper->slct($obj, 'ft_html_tg', esc_html__('HTML Tag', 'addons-for-elementor-builder'), $this->HTML_TG, 'h2');
});
do_action('afeb/widget/content/after_render_content_section', $this);
/**
*
* Prefix Text Styles
*
*/
$slctr = '{{WRAPPER}} .afeb-fancy-prefix-text';
$this->helper->add_stl_sctn($this, 'ss1', esc_html__('Prefix Text', 'addons-for-elementor-builder'), function ($obj, $opt) {
$this->helper->clr($obj, 'prfx_clr', $opt[0], esc_html__('Color', 'addons-for-elementor-builder'));
$this->helper->typo($obj, 'prfx_typo', $opt[0], esc_html__('Typography', 'addons-for-elementor-builder'));
}, [$slctr]);
/**
*
* Fluid Text Styles
*
*/
$slctr = '{{WRAPPER}} .afeb-fancy-anim-text';
$this->helper->add_stl_sctn($this, 'ss2', esc_html__('Fluid Text', 'addons-for-elementor-builder'), function ($obj, $opt) {
$this->helper->bg_grp_ctrl($obj, 'txt_bg', $opt[0]);
$this->helper->clr($obj, 'txt_clr', $opt[0], esc_html__('Text Color', 'addons-for-elementor-builder'));
$this->helper->typo($obj, 'txt_typo', $opt[0] . ' *', esc_html__('Typography', 'addons-for-elementor-builder'));
$this->helper->res_pad($obj, 'txt_pad', $opt[0]);
$this->controls->border([
'name' => 'txt_brdr',
'selector' => $opt[0],
]);
$this->controls->responsive()->border_radius('txt_brdr_rdus', [
'size_units' => ['px', '%'],
'selectors' => [
$opt[0] => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]);
}, [$slctr]);
/**
*
* Suffix Text Styles
*
*/
$slctr = '{{WRAPPER}} .afeb-fancy-suffix-text';
$this->helper->add_stl_sctn($this, 'ss3', esc_html__('Suffix Text', 'addons-for-elementor-builder'), function ($obj, $opt) {
$this->helper->clr($obj, 'sfx_clr', $opt[0], esc_html__('Color', 'addons-for-elementor-builder'));
$this->helper->typo($obj, 'sfx_typo', $opt[0], esc_html__('Typography', 'addons-for-elementor-builder'));
}, [$slctr]);
}
/**
* Render attributes
*
* @since 1.0.4
*
* @param array $settings
*/
protected function render_attrs($settings = [])
{
$classes = [];
$classes[] = 'afeb-fancy-text';
$classes[] = in_array($settings['ft_efct'], ['typing', 'rotate-2', 'rotate-3', 'scale']) ?
'afeb-anim-text-letters' : '';
$classes = array_filter($classes);
$classes = array_map('sanitize_html_class', $classes);
$this->add_render_attribute(
[
'fancy_text' => [
'class' => implode(' ', $classes),
'data-settings' => [
wp_json_encode([
'dur' => isset($settings['ft_anim_dur']) ? floatval($settings['ft_anim_dur']) : 0.2,
'dly' => isset($settings['ft_anim_dly']) ? floatval($settings['ft_anim_dly']) : 2
])
]
]
]
);
}
/**
* Render FancyText widget output on the frontend
*
* @since 1.0.0
*/
protected function render()
{
$settings = $this->get_settings_for_display();
$animated_text = !empty($settings['ft_fnctxt']) ? $settings['ft_fnctxt'] : [];
$animated_text = array_map(function ($value) {
if (!empty($value['txt'])) return $value['txt'];
}, $animated_text);
$html_tags = is_array($this->HTML_TG) ? array_keys($this->HTML_TG) : [];
$html_tag = (!empty($settings['ft_html_tg']) &&
in_array($settings['ft_html_tg'], $html_tags)) ?
$settings['ft_html_tg'] : 'h3';
$type = !empty($settings['ft_efct']) ? $settings['ft_efct'] : 'typing';
$this->render_attrs($settings);
$escaped_html_tag = tag_escape($html_tag);
?>
< print_render_attribute_string('fancy_text'); ?>>
>