PluginProbe
Copy Anything to Clipboard for WordPress – Copy Button, Copy Text & Copy Code / 3.4.3
Copy Anything to Clipboard for WordPress – Copy Button, Copy Text & Copy Code v3.4.3
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-copy-the-code-shortcode.php

class-copy-the-code-shortcode.php in Copy Anything to Clipboard for WordPress – Copy Button, Copy Text & Copy Code 3.4.3, at classes/class-copy-the-code-shortcode.php

153 lines 5.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Shortcode
4 *
5 * @package Copy the Code
6 * @since 2.2.0
7 */
8
9 use CopyTheCode\Helpers;
10
11 if ( ! class_exists( 'Copy_The_Code_Shortcode' ) ) :
12
13 /**
14 * Shortcode
15 *
16 * @since 2.2.0
17 */
18 class Copy_The_Code_Shortcode {
19
20 /**
21 * Instance
22 *
23 * @access private
24 * @var object Class Instance.
25 * @since 2.2.0
26 */
27 private static $instance;
28
29 /**
30 * Initiator
31 *
32 * @since 2.2.0
33 * @return object initialized object of class.
34 */
35 public static function get_instance() {
36 if ( ! isset( self::$instance ) ) {
37 self::$instance = new self;
38 }
39 return self::$instance;
40 }
41
42 /**
43 * Constructor
44 */
45 public function __construct() {
46 add_shortcode( 'copy', array( $this, 'shortcode_markup' ) );
47 add_shortcode( 'copy_inline', array( $this, 'copy_inline_markup' ) );
48 add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
49 }
50
51 /**
52 * Enqueue scripts
53 *
54 * @since 3.1.0
55 */
56 public function enqueue_scripts() {
57 // Core.
58 wp_enqueue_script( 'ctc-clipboard', COPY_THE_CODE_URI . 'assets/js/clipboard.js', [ 'jquery' ], COPY_THE_CODE_VER, true );
59
60 // Shortcode.
61 wp_enqueue_style( 'ctc-copy-inline', COPY_THE_CODE_URI . 'assets/css/copy-inline.css', [], COPY_THE_CODE_VER );
62 wp_enqueue_script( 'ctc-copy-inline', COPY_THE_CODE_URI . 'assets/js/copy-inline.js', [ 'jquery' ], COPY_THE_CODE_VER, true );
63 }
64
65 /**
66 * Copy inline markup
67 *
68 * @since 3.1.0
69 *
70 * @param array $atts Shortcode parameters.
71 * @param mixed $content Shortcode content.
72 *
73 * @return mixed
74 */
75 public function copy_inline_markup( $atts = array(), $content = '' ) {
76 $atts = shortcode_atts( [
77 'text' => '',
78 'display' => '',
79 'hidden' => '',
80 'style' => '',
81 'tooltip' => esc_html__( 'Copied', 'copy-the-code' ),
82 ], $atts );
83
84 $text = $atts['text'] ? $atts['text'] : $content;
85 $display = $atts['display'] ? $atts['display'] : $atts['text'];
86 $style = $atts['style'] ? 'ctc-inline-style-' . $atts['style'] : '';
87 $hidden = 'yes' === $atts['hidden'] ? 'ctc-inline-hidden' : '';
88 $tooltip = esc_html__( 'Copied', 'copy-the-code' );
89
90 ob_start();
91 ?>
92 <span class="ctc-inline-copy <?php echo esc_attr( $style ); ?>" aria-label="<?php echo esc_attr( $tooltip ); ?>">
93 <span class="ctc-inline-copy-text <?php echo esc_attr( $hidden ); ?>"><?php echo esc_html( $display ); ?></span>
94 <textarea style="display: none;" class="ctc-inline-copy-textarea" readonly="readonly"><?php echo esc_html( $text ); ?></textarea>
95 <span class="ctc-inline-copy-icon" role="button" aria-label="<?php echo esc_attr( $tooltip ); ?>">
96 <?php echo Helpers::get_svg_copy_icon(); ?>
97 <?php echo Helpers::get_svg_checked_icon(); ?>
98 </span>
99 </span>
100 <?php
101 return ob_get_clean();
102 }
103
104 /**
105 * Shortcode markup
106 *
107 * @since 2.2.0
108 * @param array $atts Shortcode parameters.
109 * @param mixed $content Shortcode content.
110 * @return mixed
111 */
112 public function shortcode_markup( $atts = array(), $content = '' ) {
113 $atts = apply_filters(
114 'copy_the_code_shortcode_atts',
115 shortcode_atts(
116 array(
117 'target' => '',
118 'title' => __( 'Copy to Clipboard', 'copy-the-code' ),
119 'text' => $content,
120 'copied-text' => 'Copied to Clipboard',
121 'tag' => 'span',
122 'class' => '',
123 'copy-as' => 'text',
124 'content' => $content,
125 'link' => isset( $atts['link'] ) ? $atts['link'] : '',
126 'style' => '',
127 'color' => '',
128 'icon-color' => '',
129 ),
130 $atts
131 )
132 );
133
134 $color = $atts['color'];
135 $display_content = wp_kses_post( $atts['text'] );
136 if ( 'icon' === $atts['style'] ) {
137 $icon_color = ! empty( $atts['icon-color'] ) ? $atts['icon-color'] : '#b5b5b5';
138
139 $display_content = '<svg style="fill: ' . esc_attr( $icon_color ) . '" viewBox="-21 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m186.667969 416c-49.984375 0-90.667969-40.683594-90.667969-90.667969v-218.664062h-37.332031c-32.363281 0-58.667969 26.300781-58.667969 58.664062v288c0 32.363281 26.304688 58.667969 58.667969 58.667969h266.664062c32.363281 0 58.667969-26.304688 58.667969-58.667969v-37.332031zm0 0"></path><path d="m469.332031 58.667969c0-32.40625-26.261719-58.667969-58.664062-58.667969h-224c-32.40625 0-58.667969 26.261719-58.667969 58.667969v266.664062c0 32.40625 26.261719 58.667969 58.667969 58.667969h224c32.402343 0 58.664062-26.261719 58.664062-58.667969zm0 0"></path></svg>';
140 }
141
142 return '<' . esc_html( $atts['tag'] ) . ' title="' . esc_attr( $atts['title'] ) . '" class="copy-the-code-shortcode ' . esc_attr( $atts['class'] ) . '" data-target="' . esc_attr( $atts['target'] ) . '" data-button-text="' . esc_attr( $atts['text'] ) . '" data-button-copy-text="' . esc_attr( $atts['copied-text'] ) . '" data-content="' . esc_attr( wp_strip_all_tags( $atts['content'] ) ) . '" data-copy-as="' . esc_attr( $atts['copy-as'] ) . '" data-link="' . esc_attr( $atts['link'] ) . '" style="color: ' . esc_attr( $color ) . '" >' . $display_content . '</' . esc_html( $atts['tag'] ) . '>';
143 }
144
145 }
146
147 /**
148 * Kicking this off by calling 'get_instance()' method
149 */
150 Copy_The_Code_Shortcode::get_instance();
151
152 endif;
153