PluginProbe
Copy Anything to Clipboard for WordPress – Copy Button, Copy Text & Copy Code / 3.5.0
Copy Anything to Clipboard for WordPress – Copy Button, Copy Text & Copy Code v3.5.0
5.5.3 3.1.0 3.2.0 3.2.1 3.3.0 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.6.0 3.7.0 3.8.0 3.8.1 3.8.2 3.8.3 4.0.0 4.0.2 4.0.3 4.0.4 4.0.5 4.1.0 4.1.1 All 78 releases
copy-the-code / classes / class-helpers.php

class-helpers.php in Copy Anything to Clipboard for WordPress – Copy Button, Copy Text & Copy Code 3.5.0, at classes/class-helpers.php

772 lines 31.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Helpers
4 *
5 * @package Copy the Code
6 * @since 1.0.0
7 */
8
9 namespace CopyTheCode;
10
11 use Elementor\Controls_Manager;
12 use Elementor\Group_Control_Background;
13 use Elementor\Group_Control_Typography;
14 use Elementor\Group_Control_Border;
15 use Elementor\Group_Control_Box_Shadow;
16
17 /**
18 * Helpers
19 *
20 * @since 1.0.0
21 */
22 class Helpers {
23 public static function get_svg_link_icon() {
24 return '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24">
25 <path fill="#B6BEC6" d="M8.818 8.818l.128-.121a3 3 0 014.115.12l1.06 1.061-1.414 1.415-1.06-1.061-.088-.078a1 1 0 00-1.327.078l-4.95 4.95-.077.087a1 1 0 00.078 1.327l2.12 2.121.088.078a1 1 0 001.327-.078l2.122-2.121 1.414 1.414-2.122 2.121-.128.121a3 3 0 01-4.114-.12L3.868 18.01l-.12-.128a3 3 0 01.12-4.115l4.95-4.95zm4.95-4.95l.128-.121a3 3 0 014.114.12l2.122 2.122.12.128a3 3 0 01-.12 4.115l-4.95 4.95-.128.12a3 3 0 01-4.114-.12L9.879 14.12l1.414-1.414 1.06 1.06.088.078a1 1 0 001.327-.078l4.95-4.95.077-.087a1 1 0 00-.077-1.327l-2.122-2.12-.087-.079a1 1 0 00-1.327.078l-2.121 2.121-1.414-1.414 2.12-2.121z">
26 </path>
27 </svg>';
28 }
29
30 public static function get_svg_pinterest_icon() {
31 return '<svg class="gUZ GjR U9O kVc" height="24" width="24" viewBox="0 0 24 24" aria-label="Pinterest" role="img"><path fill="#e60023" d="M0 12c0 5.123 3.211 9.497 7.73 11.218-.11-.937-.227-2.482.025-3.566.217-.932 1.401-5.938 1.401-5.938s-.357-.715-.357-1.774c0-1.66.962-2.9 2.161-2.9 1.02 0 1.512.765 1.512 1.682 0 1.025-.653 2.557-.99 3.978-.281 1.189.597 2.159 1.769 2.159 2.123 0 3.756-2.239 3.756-5.471 0-2.861-2.056-4.86-4.991-4.86-3.398 0-5.393 2.549-5.393 5.184 0 1.027.395 2.127.889 2.726a.36.36 0 0 1 .083.343c-.091.378-.293 1.189-.332 1.355-.053.218-.173.265-.4.159-1.492-.694-2.424-2.875-2.424-4.627 0-3.769 2.737-7.229 7.892-7.229 4.144 0 7.365 2.953 7.365 6.899 0 4.117-2.595 7.431-6.199 7.431-1.211 0-2.348-.63-2.738-1.373 0 0-.599 2.282-.744 2.84-.282 1.084-1.064 2.456-1.549 3.235C9.584 23.815 10.77 24 12 24c6.627 0 12-5.373 12-12S18.627 0 12 0 0 5.373 0 12"></path></svg>';
32 }
33
34 public static function get_svg_linkedin_icon() {
35 return '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24">
36 <path fill="#3277D4" fill-rule="evenodd" d="M21 5a2 2 0 00-2-2H5a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2V5zm-2.5 8.2v5.3h-2.79v-4.93a1.4 1.4 0 00-1.4-1.4c-.77 0-1.39.63-1.39 1.4v4.93h-2.79v-8.37h2.79v1.11c.48-.78 1.47-1.3 2.32-1.3 1.8 0 3.26 1.46 3.26 3.26zM6.88 8.56a1.686 1.686 0 000-3.37 1.69 1.69 0 00-1.69 1.69c0 .93.76 1.68 1.69 1.68zm1.39 1.57v8.37H5.5v-8.37h2.77z" clip-rule="evenodd"></path>
37 </svg>';
38 }
39
40 public static function get_svg_twitter_icon() {
41 return '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24">
42 <path fill="#4BA8F5" d="M22.92 6c-.77.35-1.6.58-2.46.69.88-.53 1.56-1.37 1.88-2.38-.83.5-1.75.85-2.72 1.05C18.83 4.5 17.72 4 16.46 4c-2.35 0-4.27 1.92-4.27 4.29 0 .34.04.67.11.98-3.56-.18-6.73-1.89-8.84-4.48-.37.63-.58 1.37-.58 2.15 0 1.49.75 2.81 1.91 3.56-.71 0-1.37-.2-1.95-.5v.03c0 2.08 1.48 3.82 3.44 4.21a4.22 4.22 0 01-1.93.07 4.28 4.28 0 004 2.98 8.521 8.521 0 01-5.33 1.84c-.34 0-.68-.02-1.02-.06C3.9 20.29 6.16 21 8.58 21c7.88 0 12.21-6.54 12.21-12.21 0-.19 0-.37-.01-.56.84-.6 1.56-1.36 2.14-2.23z">
43 </path>
44 </svg>';
45 }
46
47 public static function get_svg_whatsapp_icon() {
48 return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 241.19" class="whatsapp"><path class="cls-1" fill="#25d366" d="M205,35.05A118.61,118.61,0,0,0,120.46,0C54.6,0,1,53.61,1,119.51a119.5,119.5,0,0,0,16,59.74L0,241.19l63.36-16.63a119.43,119.43,0,0,0,57.08,14.57h0A119.54,119.54,0,0,0,205,35.07v0ZM120.5,219A99.18,99.18,0,0,1,69.91,205.1l-3.64-2.17-37.6,9.85,10-36.65-2.35-3.76A99.37,99.37,0,0,1,190.79,49.27,99.43,99.43,0,0,1,120.49,219ZM175,144.54c-3-1.51-17.67-8.71-20.39-9.71s-4.72-1.51-6.75,1.51-7.72,9.71-9.46,11.72-3.49,2.27-6.45.76-12.63-4.66-24-14.84A91.1,91.1,0,0,1,91.25,113.3c-1.75-3-.19-4.61,1.33-6.07s3-3.48,4.47-5.23a19.65,19.65,0,0,0,3-5,5.51,5.51,0,0,0-.24-5.23C99,90.27,93,75.57,90.6,69.58s-4.89-5-6.73-5.14-3.73-.09-5.7-.09a11,11,0,0,0-8,3.73C67.48,71.05,59.75,78.3,59.75,93s10.69,28.88,12.19,30.9S93,156.07,123,169c7.12,3.06,12.68,4.9,17,6.32a41.18,41.18,0,0,0,18.8,1.17c5.74-.84,17.66-7.21,20.17-14.18s2.5-13,1.75-14.19-2.69-2.06-5.7-3.59l0,0Z"></path></svg>';
49 }
50
51 public static function get_svg_facebook_icon() {
52 return '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24">
53 <path fill="#425993" fill-rule="evenodd" d="M19 3H5a2 2 0 00-2 2v14a2 2 0 002 2h7v-7h-2v-3h2V8.5A3.5 3.5 0 0115.5 5H18v3h-2a1 1 0 00-1 1v2h3v3h-3v7h4a2 2 0 002-2V5a2 2 0 00-2-2z" clip-rule="evenodd"></path>
54 </svg>';
55 }
56
57 public static function get_svg_copy_icon() {
58 return '<svg aria-hidden="true" focusable="false" role="img" class="copy-icon" viewBox="0 0 16 16" width="16" height="16" fill="currentColor"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg>';
59 }
60
61 public static function get_svg_checked_icon() {
62 return '<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="check-icon" fill="currentColor"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg>';
63 }
64
65 public static function get_copy_button( $args = [] ) {
66 $show_icon = isset( $args['show_icon'] ) ? $args['show_icon'] : 'yes';
67 $with_icon = 'yes' === $show_icon ? 'with-icon' : 'without-icon';
68 $as_raw = isset( $args['as_raw'] ) ? 'yes' : '';
69 $button_text = isset( $args['button_text'] ) ? $args['button_text'] : esc_html__( 'Copy', 'copy-the-code' );
70 $button_class = isset( $args['button_class'] ) ? $args['button_class'] : '';
71 $button_text_copied = isset( $args['button_text_copied'] ) ? $args['button_text_copied'] : esc_html__( 'Copied!', 'copy-the-code' );
72 $icon_direction = isset( $args['icon_direction'] ) ? $args['icon_direction'] : 'before';
73
74 ob_start();
75 ?>
76 <button class="ctc-block-copy ctc-<?php echo esc_attr( $with_icon ); ?>" copy-as-raw='<?php echo esc_html( $as_raw ); ?>' data-copied="<?php echo esc_html( $button_text_copied ); ?>">
77 <?php
78 if ( 'before' === $icon_direction && 'yes' === $show_icon ) {
79 echo self::get_svg_copy_icon();
80 echo self::get_svg_checked_icon();
81 }
82 echo '<span class="ctc-button-text">' . esc_html( $button_text ) . '</span>';
83 if ( 'after' === $icon_direction && 'yes' === $show_icon ) {
84 echo self::get_svg_copy_icon();
85 echo self::get_svg_checked_icon();
86 }
87 ?>
88 </button>
89 <?php
90 return ob_get_clean();
91 }
92
93 /**
94 * Is shortcode used
95 *
96 * @param string $shortcode
97 * @since 3.1.0
98 */
99 public static function is_shortcode_used( $shortcode = '' ) {
100 global $post;
101 if ( ! $post ) {
102 return false;
103 }
104
105 $found = false;
106 if ( has_shortcode( $post->post_content, $shortcode ) ) {
107 $found = true;
108 }
109
110 return $found;
111 }
112
113 /**
114 * Get categories
115 *
116 * @since 3.2.0
117 */
118 public static function get_categories() {
119 return [ 'copy-the-code', 'basic' ];
120 }
121
122 /**
123 * Get common keywords
124 *
125 * @param array $keywords New keywords.
126 * @since 3.2.0
127 */
128 public static function get_keywords( $keywords = [] ) {
129 $default = [ 'copy', 'paste', 'clipboard', 'copy clipboard', 'copy to clipboard', 'copy anything to clipboard' ];
130
131 return array_merge( $default, $keywords );
132 }
133
134 /**
135 * Register "Copy Content" Section
136 *
137 * @param object $self
138 */
139 public static function register_copy_content_section( $self, $args = [] ) {
140 $self->start_controls_section(
141 'copy_content_section',
142 [
143 'label' => esc_html__( 'Hidden Copy Content', 'copy-the-code' ),
144 ]
145 );
146
147 if ( isset( $args['before_controls'] ) ) {
148 foreach ( $args['before_controls'] as $control_id => $options ) {
149 $self->add_control( $control_id, $options );
150 }
151 }
152
153 $self->add_control(
154 'copy_content',
155 [
156 'label' => isset( $args[ 'label' ] ) ? $args[ 'label' ] : esc_html__( 'Enter Text that Copy to Clipboard', 'copy-the-code' ),
157 'type' => Controls_Manager::TEXTAREA,
158 'default' => isset( $args[ 'default' ] ) ? $args[ 'default' ] : '',
159 'rows' => 10,
160 ]
161 );
162
163 if ( isset( $args['after_controls'] ) ) {
164 foreach ( $args['after_controls'] as $control_id => $options ) {
165 $self->add_control( $control_id, $options );
166 }
167 }
168
169 $self->end_controls_section();
170 }
171
172 /**
173 * Register "Copy Button" Section
174 *
175 * @param array $args
176 * @param object $self
177 */
178 public static function register_copy_button_section( $self, $args = [] ) {
179 $default = [
180 'button_text' => isset( $args[ 'button_text' ] ) ? $args[ 'button_text' ] : esc_html__( 'Copy to Clipboard', 'copy-the-code' ),
181 'button_text_copied' => isset( $args[ 'button_text_copied' ] ) ? $args[ 'button_text_copied' ] : esc_html__( 'Copied!', 'copy-the-code' ),
182 'show_icon' => 'yes',
183 'icon_direction' => 'before',
184 ];
185
186 $self->start_controls_section(
187 'copy_button_section',
188 [
189 'label' => esc_html__( 'Copy Button', 'copy-the-code' ),
190 ]
191 );
192
193 $self->add_control(
194 'copy_button_text',
195 [
196 'label' => esc_html__( 'Button Text', 'copy-the-code' ),
197 'type' => Controls_Manager::TEXT,
198 'default' => $default[ 'button_text' ],
199 ]
200 );
201
202 $self->add_control(
203 'copy_button_text_copied',
204 [
205 'label' => esc_html__( 'After Copy Text', 'copy-the-code' ),
206 'type' => Controls_Manager::TEXT,
207 'default' => $default[ 'button_text_copied' ],
208 ]
209 );
210
211 // Alignment.
212 $self->add_responsive_control(
213 'copy_button_align',
214 [
215 'label' => esc_html__( 'Alignment', 'copy-the-code' ),
216 'type' => Controls_Manager::CHOOSE,
217 'options' => [
218 'left' => [
219 'title' => esc_html__( 'Left', 'copy-the-code' ),
220 'icon' => 'eicon-text-align-left',
221 ],
222 'center' => [
223 'title' => esc_html__( 'Center', 'copy-the-code' ),
224 'icon' => 'eicon-text-align-center',
225 ],
226 'right' => [
227 'title' => esc_html__( 'Right', 'copy-the-code' ),
228 'icon' => 'eicon-text-align-right',
229 ],
230 ],
231 'selectors' => [
232 '{{WRAPPER}} .ctc-block-actions' => 'text-align: {{VALUE}};',
233 ],
234 ]
235 );
236
237 // Show Icon.
238 $self->add_control(
239 'copy_show_icon',
240 [
241 'label' => esc_html__( 'Show Icon', 'copy-the-code' ),
242 'type' => Controls_Manager::SWITCHER,
243 'label_on' => esc_html__( 'Show', 'copy-the-code' ),
244 'label_off' => esc_html__( 'Hide', 'copy-the-code' ),
245 'return_value' => 'yes',
246 'default' => 'yes',
247 ]
248 );
249
250 $self->add_control(
251 'copy_icon_direction',
252 [
253 'label' => esc_html__( 'Icon Direction', 'copy-the-code' ),
254 'type' => Controls_Manager::SELECT,
255 'default' => 'before',
256 'options' => [
257 'before' => esc_html__( 'Before', 'copy-the-code' ),
258 'after' => esc_html__( 'After', 'copy-the-code' ),
259 ],
260 'condition' => [
261 'copy_show_icon' => 'yes',
262 ],
263 ]
264 );
265
266 $self->add_responsive_control(
267 'copy_icon_text_gap',
268 [
269 'label' => esc_html__( 'Icon and Text Gap', 'copy-the-code' ),
270 'type' => Controls_Manager::SLIDER,
271 'size_units' => [ 'px', 'em' ],
272 'range' => [
273 'px' => [
274 'min' => 0,
275 'max' => 100,
276 ],
277 'em' => [
278 'min' => 0,
279 'max' => 10,
280 ],
281 ],
282 'selectors' => [
283 '{{WRAPPER}} .ctc-with-icon' => 'gap: {{SIZE}}{{UNIT}};',
284 ],
285 'condition' => [
286 'copy_show_icon' => 'yes',
287 ],
288 ]
289 );
290
291 $self->end_controls_section();
292 }
293
294 /**
295 * Register "Copy Button Style" Section
296 *
297 * @param object $self
298 */
299 public static function register_copy_button_style_section( $self ) {
300 self::register_style_section( $self, 'Copy Button', '.ctc-block-copy', [
301 'text_align' => false,
302 'normal_text_color' => [
303 'selectors' => [
304 '{{WRAPPER}} .ctc-block-copy' => 'color: {{VALUE}};',
305 '{{WRAPPER}} .ctc-block-copy svg' => 'fill: {{VALUE}};',
306 ]
307 ],
308 'hover_text_color' => [
309 'selectors' => [
310 '{{WRAPPER}} .ctc-block-copy:hover' => 'color: {{VALUE}};',
311 '{{WRAPPER}} .ctc-block-copy:hover svg' => 'fill: {{VALUE}};',
312 ]
313 ],
314 ] );
315 }
316
317 /**
318 * Render "Copy Button"
319 *
320 * @param object $self
321 */
322 public static function render_copy_button( $self ) {
323 $button_text = $self->get_settings_for_display( 'copy_button_text' );
324 $button_text_copied = $self->get_settings_for_display( 'copy_button_text_copied' );
325 $show_icon = $self->get_settings_for_display( 'copy_show_icon' );
326 $icon_direction = $self->get_settings_for_display( 'copy_icon_direction' );
327
328 echo Helpers::get_copy_button( [
329 'as_raw' => 'yes',
330 'button_text' => $button_text,
331 'button_text_copied' => $button_text_copied,
332 'icon_direction' => $icon_direction,
333 'show_icon' => $show_icon,
334 ] );
335 }
336
337 /**
338 * Render "Copy Content"
339 *
340 * @param object $self
341 * @param array $args
342 */
343 public static function render_copy_content( $self, $args = [] ) {
344 $content = isset( $args[ 'content' ] ) ? $args[ 'content' ] : $self->get_settings_for_display( 'copy_content' );
345 ?>
346 <textarea class="ctc-copy-content" style="display: none;"><?php echo wp_kses_post( apply_shortcodes( $content ) ); ?></textarea>
347 <?php
348 }
349
350 /**
351 * Register "Get Pro" Section
352 *
353 * @param object $self
354 * @param array $args
355 */
356 public static function register_pro_section( $self, $label ) {
357 $id = str_replace( ' ', '-', $label );
358 $id = strtolower( $id );
359
360 $self->start_controls_section(
361 $id . '_box',
362 [
363 'label' => $label . ' (Pro)',
364 'tab' => Controls_Manager::TAB_STYLE,
365 ]
366 );
367
368 // Buy pro.
369 $self->add_control(
370 $id . '_box_content',
371 [
372 'type' => Controls_Manager::RAW_HTML,
373 'raw' => '<div style="text-align: center;"><h2 style="font-weight: 600;margin: 0 0 10px 0;font-size: 14px;">Unlock Premium Features!</h2><p style="margin: 0 0 10px 0;">Upgrade to Clipboard Pro for enhanced functionality and exclusive benefits.</p><p style="margin: 0 0 10px 0;">Ready to level up your experience?</p><a href="https://clipboard.agency/#pricing" class="button button-primary" target="_blank">See Pricing Plans</a></div>',
374 ]
375 );
376
377 $self->end_controls_section();
378 }
379
380 /**
381 * Register "Get Pro" Sections
382 *
383 * @param object $self
384 * @param array $labels
385 */
386 public static function register_pro_sections( $self, $labels = [] ) {
387 foreach ( $labels as $label ) {
388 self::register_pro_section( $self, $label );
389 }
390 }
391
392 /**
393 * Register normal and hover styles.
394 *
395 * @param object $self
396 * @param string $label
397 * @param array $args
398 */
399 public static function register_style_section( $self, $label = '', $selector = '', $args = [] ) {
400 $id = 'reusable-' . sanitize_title_with_dashes( $label );
401
402 $size = isset( $args[ 'size' ] ) ? $args[ 'size' ] : false;
403 $text_decoration = isset( $args[ 'text_decoration' ] ) ? $args[ 'text_decoration' ] : false;
404 $margin = isset( $args[ 'margin' ] ) ? $args[ 'margin' ] : true;
405 $padding = isset( $args[ 'padding' ] ) ? $args[ 'padding' ] : true;
406 $border = isset( $args[ 'border' ] ) ? $args[ 'border' ] : false; // Disabled.
407 $border_radius = isset( $args[ 'border_radius' ] ) ? $args[ 'border_radius' ] : true;
408 $background = isset( $args[ 'background' ] ) ? $args[ 'background' ] : false; // Disabled.
409 $text_color = isset( $args[ 'text_color' ] ) ? $args[ 'text_color' ] : false; // Disabled.
410 $typography = isset( $args[ 'typography' ] ) ? $args[ 'typography' ] : true;
411 $text_align = isset( $args[ 'text_align' ] ) ? $args[ 'text_align' ] : true;
412 $box_shadow = isset( $args[ 'box_shadow' ] ) ? $args[ 'box_shadow' ] : false; // Disabled.
413 $tabs = isset( $args[ 'tabs' ] ) ? $args[ 'tabs' ] : true;
414 $normal_background = isset( $args[ 'normal_background' ] ) ? $args[ 'normal_background' ] : true;
415 $normal_text_color = isset( $args[ 'normal_text_color' ] ) ? $args[ 'normal_text_color' ] : true;
416 $normal_typography = isset( $args[ 'normal_typography' ] ) ? $args[ 'normal_typography' ] : false; // Disabled.
417 $normal_border = isset( $args[ 'normal_border' ] ) ? $args[ 'normal_border' ] : true;
418 $normal_box_shadow = isset( $args[ 'normal_box_shadow' ] ) ? $args[ 'normal_box_shadow' ] : true;
419
420 // Section.
421 $self->start_controls_section(
422 $id . '_style_section',
423 [
424 'label' => $label,
425 'tab' => Controls_Manager::TAB_STYLE,
426 ]
427 );
428
429 if ( $margin ) :
430 $self->add_responsive_control(
431 $id . '_margin',
432 array(
433 'label' => esc_html__( 'Margin', 'copy-the-code' ),
434 'type' => Controls_Manager::DIMENSIONS,
435 'size_units' => array( 'px', 'em', '%' ),
436 'selectors' => array(
437 '{{WRAPPER}} ' . $selector => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
438 ),
439 )
440 );
441 endif;
442
443 if ( $padding ) :
444 $self->add_responsive_control(
445 $id . '_padding',
446 array(
447 'label' => esc_html__( 'Padding', 'copy-the-code' ),
448 'type' => Controls_Manager::DIMENSIONS,
449 'size_units' => array( 'px', 'em', '%' ),
450 'selectors' => array(
451 '{{WRAPPER}} ' . $selector => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
452 ),
453 )
454 );
455 endif;
456
457 if ( $border ) :
458 $border_selector = '{{WRAPPER}} ' . $selector;
459 if ( isset( $args[ 'border' ] ) && is_array( $args[ 'border' ] ) ) {
460 if ( isset( $args[ 'border' ][ 'selector' ] ) ) {
461 $border_selector = $args[ 'border' ][ 'selector' ];
462 }
463 }
464 $self->add_group_control(
465 \Elementor\Group_Control_Border::get_type(),
466 [
467 'name' => $id . '_border',
468 'selector' => $border_selector,
469 ]
470 );
471 endif;
472
473 if ( $border_radius ) :
474 $self->add_responsive_control(
475 $id . '_border_radius',
476 array(
477 'label' => esc_html__( 'Border Radius', 'copy-the-code' ),
478 'type' => Controls_Manager::DIMENSIONS,
479 'size_units' => array( 'px', '%' ),
480 'selectors' => array(
481 '{{WRAPPER}} ' . $selector => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
482 ),
483 )
484 );
485 endif;
486
487 if ( $background ) :
488 $self->add_group_control(
489 \Elementor\Group_Control_Background::get_type(),
490 [
491 'name' => $id . '_background',
492 'types' => [ 'classic', 'gradient' ],
493 'exclude' => [ 'image', 'video' ],
494 'selector' => '{{WRAPPER}} ' . $selector,
495 ]
496 );
497 endif;
498
499 if ( $text_color ) :
500 $self->add_control(
501 $id . '_text_color',
502 [
503 'label' => esc_html__( 'Text Color', 'copy-the-code' ),
504 'type' => Controls_Manager::COLOR,
505 'selectors' => [
506 '{{WRAPPER}} ' . $selector => 'color: {{VALUE}};',
507 ],
508 ]
509 );
510 endif;
511
512 if ( $typography ) :
513 $self->add_group_control(
514 \Elementor\Group_Control_Typography::get_type(),
515 [
516 'name' => $id . '_typography',
517 'selector' => '{{WRAPPER}} ' . $selector,
518 ]
519 );
520 endif;
521
522 if ( $size ) :
523 $size_label = esc_html__( 'Width', 'copy-the-code' );
524 $size_selectors = [
525 '{{WRAPPER}} ' . $selector => 'width: {{SIZE}}{{UNIT}};',
526 ];
527 if ( isset( $args[ 'size' ] ) && is_array( $args[ 'size' ] ) ) {
528 if ( isset( $args[ 'size' ][ 'selectors' ] ) ) {
529 $size_selectors = $args[ 'size' ][ 'selectors' ];
530 }
531 if ( isset( $args[ 'size' ][ 'label' ] ) ) {
532 $size_label = $args[ 'size' ][ 'label' ];
533 }
534 }
535
536 $self->add_responsive_control(
537 $id . '_size',
538 [
539 'label' => $size_label,
540 'type' => Controls_Manager::SLIDER,
541 'size_units' => [ 'px', 'em', '%' ],
542 'selectors' => $size_selectors,
543 ]
544 );
545 endif;
546
547 if ( $text_decoration ) :
548 $text_decoration_selectors = [
549 '{{WRAPPER}} ' . $selector => 'text-decoration: {{VALUE}};',
550 ];
551 if ( isset( $args[ 'text_decoration' ] ) && is_array( $args[ 'text_decoration' ] ) ) {
552 if ( isset( $args[ 'text_decoration' ][ 'selectors' ] ) ) {
553 $text_decoration_selectors = $args[ 'text_decoration' ][ 'selectors' ];
554 }
555 }
556
557 $self->add_control(
558 $id . '_text_decoration',
559 [
560 'label' => esc_html__( 'Text Decoration', 'copy-the-code' ),
561 'type' => Controls_Manager::SELECT,
562 'options' => [
563 'none' => esc_html__( 'None', 'copy-the-code' ),
564 'underline' => esc_html__( 'Underline', 'copy-the-code' ),
565 'overline' => esc_html__( 'Overline', 'copy-the-code' ),
566 'line-through' => esc_html__( 'Line Through', 'copy-the-code' ),
567 ],
568 'selectors' => $text_decoration_selectors,
569 ]
570 );
571 endif;
572
573 if ( $text_align ) :
574 $self->add_responsive_control(
575 $id . '_text_align',
576 [
577 'label' => esc_html__( 'Alignment', 'copy-the-code' ),
578 'type' => Controls_Manager::CHOOSE,
579 'options' => [
580 'left' => [
581 'title' => esc_html__( 'Left', 'copy-the-code' ),
582 'icon' => 'eicon-text-align-left',
583 ],
584 'center' => [
585 'title' => esc_html__( 'Center', 'copy-the-code' ),
586 'icon' => 'eicon-text-align-center',
587 ],
588 'right' => [
589 'title' => esc_html__( 'Right', 'copy-the-code' ),
590 'icon' => 'eicon-text-align-right',
591 ],
592 ],
593 'selectors' => [
594 '{{WRAPPER}} ' . $selector => 'text-align: {{VALUE}};',
595 ],
596 ]
597 );
598 endif;
599
600 if ( $box_shadow ) :
601 $self->add_group_control(
602 \Elementor\Group_Control_Box_Shadow::get_type(),
603 [
604 'name' => $id . '_box_shadow',
605 'selector' => '{{WRAPPER}} ' . $selector,
606 ]
607 );
608 endif;
609
610 if ( $tabs ) :
611 // Tabs.
612 $self->start_controls_tabs(
613 $id . '_style_tabs'
614 );
615
616 // Normal.
617 $self->start_controls_tab(
618 $id . '_style_normal_tab',
619 [
620 'label' => esc_html__( 'Normal', 'copy-the-code' ),
621 ]
622 );
623
624 if ( $normal_background ) :
625 $self->add_group_control(
626 \Elementor\Group_Control_Background::get_type(),
627 [
628 'name' => $id . '_normal_background',
629 'types' => [ 'classic', 'gradient' ],
630 'exclude' => [ 'image', 'video' ],
631 'selector' => '{{WRAPPER}} ' . $selector,
632 ]
633 );
634 endif;
635
636 if ( $normal_text_color ) :
637 $normal_text_color_label = esc_html__( 'Text Color', 'copy-the-code' );
638 $normal_text_color_selectors = [
639 '{{WRAPPER}} ' . $selector => 'color: {{VALUE}};',
640 ];
641 if ( isset( $args[ 'normal_text_color' ] ) && is_array( $args[ 'normal_text_color' ] ) ) {
642 if ( isset( $args[ 'normal_text_color' ][ 'selectors' ] ) ) {
643 $normal_text_color_selectors = $args[ 'normal_text_color' ][ 'selectors' ];
644 }
645 if ( isset( $args[ 'normal_text_color' ][ 'label' ] ) ) {
646 $normal_text_color_label = $args[ 'normal_text_color' ][ 'label' ];
647 }
648 }
649 $self->add_control(
650 $id . '_normal_text_color',
651 [
652 'label' => $normal_text_color_label,
653 'type' => Controls_Manager::COLOR,
654 'selectors' => $normal_text_color_selectors,
655 ]
656 );
657 endif;
658
659 if ( $normal_typography ) :
660 $self->add_group_control(
661 \Elementor\Group_Control_Typography::get_type(),
662 [
663 'name' => $id . '_normal_typography',
664 'selector' => '{{WRAPPER}} ' . $selector,
665 ]
666 );
667 endif;
668
669 if ( $normal_border ) :
670 $self->add_group_control(
671 \Elementor\Group_Control_Border::get_type(),
672 [
673 'name' => $id . '_normal_border',
674 'default' => 'red',
675 'selector' => '{{WRAPPER}} ' . $selector,
676 ]
677 );
678 endif;
679
680 if ( $normal_box_shadow ) :
681 $self->add_group_control(
682 \Elementor\Group_Control_Box_Shadow::get_type(),
683 [
684 'name' => $id . '_normal_box_shadow',
685 'selector' => '{{WRAPPER}} ' . $selector,
686 ]
687 );
688 endif;
689
690 $self->end_controls_tab();
691 // Normal End.
692
693 // Hover.
694 $self->start_controls_tab(
695 $id . '_style_hover_tab',
696 [
697 'label' => esc_html__( 'Hover', 'copy-the-code' ),
698 ]
699 );
700
701 if ( $normal_background ) :
702 $self->add_group_control(
703 \Elementor\Group_Control_Background::get_type(),
704 [
705 'name' => $id . '_hover_background',
706 'types' => [ 'classic', 'gradient' ],
707 'exclude' => [ 'image' ],
708 'selector' => '{{WRAPPER}} ' . $selector . ':hover',
709 ]
710 );
711 endif;
712
713 if ( $normal_text_color ) :
714
715 $hover_text_color_label = esc_html__( 'Text Color', 'copy-the-code' );
716 $hover_text_color_selectors = [
717 '{{WRAPPER}} ' . $selector => 'color: {{VALUE}};',
718 ];
719 if ( isset( $args[ 'hover_text_color' ] ) && is_array( $args[ 'hover_text_color' ] ) ) {
720 if ( isset( $args[ 'hover_text_color' ][ 'selectors' ] ) ) {
721 $hover_text_color_selectors = $args[ 'hover_text_color' ][ 'selectors' ];
722 }
723 if ( isset( $args[ 'hover_text_color' ][ 'label' ] ) ) {
724 $hover_text_color_label = $args[ 'hover_text_color' ][ 'label' ];
725 }
726 }
727
728 $self->add_control(
729 $id . '_hover_text_color',
730 array(
731 'label' => $hover_text_color_label,
732 'type' => Controls_Manager::COLOR,
733 'selectors' => $hover_text_color_selectors,
734 )
735 );
736 endif;
737
738 if ( $normal_border ) :
739 $self->add_control(
740 $id . '_hover_border',
741 array(
742 'label' => esc_html__( 'Border Color', 'copy-the-code' ),
743 'type' => Controls_Manager::COLOR,
744 'selectors' => array(
745 '{{WRAPPER}} ' . $selector . ':hover' => 'border-color: {{VALUE}};',
746 ),
747 )
748 );
749 endif;
750
751 if ( $normal_box_shadow ) :
752 $self->add_group_control(
753 \Elementor\Group_Control_Box_Shadow::get_type(),
754 array(
755 'name' => $id . '_hover_box_shadow',
756 'selector' => '{{WRAPPER}} ' . $selector . ':hover',
757 )
758 );
759 endif;
760
761 $self->end_controls_tab();
762 // Hover End.
763
764 $self->end_controls_tabs();
765 // Tabs.
766 endif;
767
768 $self->end_controls_section();
769 // Section End.
770 }
771
772 }