PluginProbe
Copy Anything to Clipboard for WordPress – Copy Button, Copy Text & Copy Code / 3.4.2
Copy Anything to Clipboard for WordPress – Copy Button, Copy Text & Copy Code v3.4.2
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 / elementor / widgets / code-snippet / widget.php

widget.php in Copy Anything to Clipboard for WordPress – Copy Button, Copy Text & Copy Code 3.4.2, at classes/elementor/widgets/code-snippet/widget.php

377 lines 10.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Elementor Code Snippet Block
5 *
6 * @package Copy the Code
7 * @since 3.1.0
8 */
9 namespace CopyTheCode\Elementor\Block;
10
11 use CopyTheCode\Helpers ;
12 use Elementor\Widget_Base ;
13 use Elementor\Controls_Manager ;
14 /**
15 * Code Snippet Block
16 *
17 * @since 3.1.0
18 */
19 class CodeSnippet extends Widget_Base
20 {
21 /**
22 * Constructor
23 *
24 * @param array $data
25 * @param array $args
26 *
27 * @since 3.1.0
28 */
29 public function __construct( $data = array(), $args = null )
30 {
31 parent::__construct( $data, $args );
32 // Core.
33 wp_enqueue_style(
34 'ctc-blocks-core',
35 COPY_THE_CODE_URI . 'classes/blocks/assets/css/style.css',
36 [],
37 COPY_THE_CODE_VER,
38 'all'
39 );
40 wp_enqueue_script(
41 'ctc-clipboard',
42 COPY_THE_CODE_URI . 'assets/js/clipboard.js',
43 [ 'jquery' ],
44 COPY_THE_CODE_VER,
45 true
46 );
47 wp_enqueue_script(
48 'ctc-blocks-core',
49 COPY_THE_CODE_URI . 'classes/blocks/assets/js/core.js',
50 [ 'ctc-clipboard' ],
51 COPY_THE_CODE_VER,
52 true
53 );
54 // Prism JS scripts.
55 wp_register_script(
56 'ctc-prism-default',
57 COPY_THE_CODE_URI . 'classes/blocks/assets/lib/prism/prism-default.js',
58 [],
59 COPY_THE_CODE_VER,
60 true
61 );
62 wp_register_script(
63 'ctc-prism-coy',
64 COPY_THE_CODE_URI . 'classes/blocks/assets/lib/prism/prism-coy.js',
65 [],
66 COPY_THE_CODE_VER,
67 true
68 );
69 wp_register_script(
70 'ctc-prism-dark',
71 COPY_THE_CODE_URI . 'classes/blocks/assets/lib/prism/prism-dark.js',
72 [],
73 COPY_THE_CODE_VER,
74 true
75 );
76 wp_register_script(
77 'ctc-prism-funky',
78 COPY_THE_CODE_URI . 'classes/blocks/assets/lib/prism/prism-funky.js',
79 [],
80 COPY_THE_CODE_VER,
81 true
82 );
83 wp_register_script(
84 'ctc-prism-okaidia',
85 COPY_THE_CODE_URI . 'classes/blocks/assets/lib/prism/prism-okaidia.js',
86 [],
87 COPY_THE_CODE_VER,
88 true
89 );
90 wp_register_script(
91 'ctc-prism-solarizedlight',
92 COPY_THE_CODE_URI . 'classes/blocks/assets/lib/prism/prism-solarizedlight.js',
93 [],
94 COPY_THE_CODE_VER,
95 true
96 );
97 wp_register_script(
98 'ctc-prism-tomorrow',
99 COPY_THE_CODE_URI . 'classes/blocks/assets/lib/prism/prism-tomorrow.js',
100 [],
101 COPY_THE_CODE_VER,
102 true
103 );
104 wp_register_script(
105 'ctc-prism-twilight',
106 COPY_THE_CODE_URI . 'classes/blocks/assets/lib/prism/prism-twilight.js',
107 [],
108 COPY_THE_CODE_VER,
109 true
110 );
111 // Prism CSS styles.
112 wp_register_style(
113 'ctc-prism-default',
114 COPY_THE_CODE_URI . 'classes/blocks/assets/lib/prism/prism-default.css',
115 [],
116 COPY_THE_CODE_VER,
117 'all'
118 );
119 wp_register_style(
120 'ctc-prism-coy',
121 COPY_THE_CODE_URI . 'classes/blocks/assets/lib/prism/prism-coy.css',
122 [],
123 COPY_THE_CODE_VER,
124 'all'
125 );
126 wp_register_style(
127 'ctc-prism-dark',
128 COPY_THE_CODE_URI . 'classes/blocks/assets/lib/prism/prism-dark.css',
129 [],
130 COPY_THE_CODE_VER,
131 'all'
132 );
133 wp_register_style(
134 'ctc-prism-funky',
135 COPY_THE_CODE_URI . 'classes/blocks/assets/lib/prism/prism-funky.css',
136 [],
137 COPY_THE_CODE_VER,
138 'all'
139 );
140 wp_register_style(
141 'ctc-prism-okaidia',
142 COPY_THE_CODE_URI . 'classes/blocks/assets/lib/prism/prism-okaidia.css',
143 [],
144 COPY_THE_CODE_VER,
145 'all'
146 );
147 wp_register_style(
148 'ctc-prism-solarizedlight',
149 COPY_THE_CODE_URI . 'classes/blocks/assets/lib/prism/prism-solarizedlight.css',
150 [],
151 COPY_THE_CODE_VER,
152 'all'
153 );
154 wp_register_style(
155 'ctc-prism-tomorrow',
156 COPY_THE_CODE_URI . 'classes/blocks/assets/lib/prism/prism-tomorrow.css',
157 [],
158 COPY_THE_CODE_VER,
159 'all'
160 );
161 wp_register_style(
162 'ctc-prism-twilight',
163 COPY_THE_CODE_URI . 'classes/blocks/assets/lib/prism/prism-twilight.css',
164 [],
165 COPY_THE_CODE_VER,
166 'all'
167 );
168 // Block.
169 wp_enqueue_style(
170 'ctc-el-code-snippet',
171 COPY_THE_CODE_URI . 'classes/elementor/widgets/code-snippet/style.css',
172 [ 'ctc-blocks-core' ],
173 COPY_THE_CODE_VER,
174 'all'
175 );
176 }
177
178 public function get_theme()
179 {
180 return 'ctc-prism-' . apply_filters( 'ctc/elementor/code_snippet/theme', 'default' );
181 }
182
183 /**
184 * Get script dependencies
185 */
186 public function get_script_depends()
187 {
188 $theme = $this->get_theme();
189 if ( $theme ) {
190 return [ $theme, 'ctc-el-code-snippet' ];
191 }
192 return [ 'ctc-el-code-snippet' ];
193 }
194
195 /**
196 * Get style dependencies
197 */
198 public function get_style_depends()
199 {
200 $theme = $this->get_theme();
201 if ( $theme ) {
202 return [ $theme, 'ctc-blocks-core' ];
203 }
204 return [ 'ctc-blocks-core' ];
205 }
206
207 /**
208 * Get name
209 */
210 public function get_name()
211 {
212 return 'ctc_code_snippet';
213 }
214
215 /**
216 * Get title
217 */
218 public function get_title()
219 {
220 return esc_html__( 'Code Snippet', 'copy-the-code' );
221 }
222
223 /**
224 * Get icon
225 */
226 public function get_icon()
227 {
228 return 'eicon-code-bold';
229 }
230
231 /**
232 * Get categories
233 */
234 public function get_categories()
235 {
236 return [ 'copy-the-code' ];
237 }
238
239 /**
240 * Get keywords
241 */
242 public function get_keywords()
243 {
244 return Helpers::get_keywords( [
245 'code',
246 'snippet',
247 'copy code',
248 'copy snippet',
249 'copy code snippet'
250 ] );
251 }
252
253 /**
254 * Render
255 */
256 public function render()
257 {
258 $code_snippet = $this->get_settings_for_display( 'code_snippet' );
259 $language = $this->get_settings_for_display( 'language' );
260 $file_name = $this->get_settings_for_display( 'file_name' );
261 $theme = $this->get_theme();
262 $languages = $this->get_languages();
263 $language = ( isset( $languages[$language] ) ? $languages[$language] : $language );
264 ?>
265 <div class="ctc-block ctc-code-snippet <?php
266 echo esc_attr( $theme ) ;
267 ?>">
268 <div class="ctc-code-snippet-header">
269 <?php
270
271 if ( $file_name ) {
272 ?>
273 <div class='ctc-code-snippet-file-name'>
274 <?php
275 echo do_shortcode( '[copy_inline text="' . esc_html( $file_name ) . '"]' ) ;
276 ?>
277 </div>
278 <?php
279 }
280
281 ?>
282 <div class='ctc-code-snippet-language'><?php
283 echo esc_html( $language ) ;
284 ?></div>
285 </div>
286 <div class="ctc-block-content">
287 <pre><code class="language-<?php
288 echo esc_attr( $language ) ;
289 ?>"><?php
290 echo esc_html( $code_snippet ) ;
291 ?></code></pre>
292 </div>
293 <div class="ctc-block-actions">
294 <?php
295 Helpers::render_copy_button( $this );
296 ?>
297 </div>
298 <textarea class="ctc-copy-content" style="display: none;"><?php
299 echo esc_html( $code_snippet ) ;
300 ?></textarea>
301 </div>
302 <?php
303 }
304
305 /**
306 * Get languages
307 */
308 public function get_languages()
309 {
310 return [
311 'markup' => esc_html__( 'Markup', 'copy-the-code' ),
312 'html' => esc_html__( 'HTML', 'copy-the-code' ),
313 'css' => esc_html__( 'CSS', 'copy-the-code' ),
314 'javascript' => esc_html__( 'JavaScript', 'copy-the-code' ),
315 'php' => esc_html__( 'PHP', 'copy-the-code' ),
316 'python' => esc_html__( 'Python', 'copy-the-code' ),
317 'ruby' => esc_html__( 'Ruby', 'copy-the-code' ),
318 'sass' => esc_html__( 'Sass', 'copy-the-code' ),
319 'scss' => esc_html__( 'SCSS', 'copy-the-code' ),
320 'sql' => esc_html__( 'SQL', 'copy-the-code' ),
321 'bash' => esc_html__( 'Bash', 'copy-the-code' ),
322 'c' => esc_html__( 'C', 'copy-the-code' ),
323 'cpp' => esc_html__( 'C++', 'copy-the-code' ),
324 'csharp' => esc_html__( 'C#', 'copy-the-code' ),
325 'go' => esc_html__( 'Go', 'copy-the-code' ),
326 'java' => esc_html__( 'Java', 'copy-the-code' ),
327 'kotlin' => esc_html__( 'Kotlin', 'copy-the-code' ),
328 'objectivec' => esc_html__( 'Objective-C', 'copy-the-code' ),
329 'swift' => esc_html__( 'Swift', 'copy-the-code' ),
330 'typescript' => esc_html__( 'TypeScript', 'copy-the-code' ),
331 'vbnet' => esc_html__( 'VB.Net', 'copy-the-code' ),
332 ];
333 }
334
335 /**
336 * Register controls
337 */
338 protected function _register_controls()
339 {
340 /**
341 * Group: Code Section
342 */
343 $this->start_controls_section( 'code_section', [
344 'label' => esc_html__( 'Code Snippet', 'copy-the-code' ),
345 ] );
346 $this->add_control( 'file_name', [
347 'label' => esc_html__( 'File Name', 'copy-the-code' ),
348 'type' => \Elementor\Controls_Manager::TEXT,
349 'default' => 'index.js',
350 ] );
351 $this->add_control( 'language', [
352 'label' => esc_html__( 'Language', 'copy-the-code' ),
353 'type' => \Elementor\Controls_Manager::SELECT,
354 'default' => 'javascript',
355 'options' => $this->get_languages(),
356 ] );
357 $this->add_control( 'code_snippet', [
358 'label' => esc_html__( 'Code Snippet', 'copy-the-code' ),
359 'type' => Controls_Manager::TEXTAREA,
360 'default' => 'console.log("Hello World");',
361 'rows' => 10,
362 ] );
363 $this->end_controls_section();
364 // Copy Button Section.
365 Helpers::register_copy_button_section( $this, [
366 'button_text' => esc_html__( 'Copy Code Snippet', 'copy-the-code' ),
367 ] );
368 Helpers::register_pro_sections( $this, [
369 'Quote Box',
370 'Message Box',
371 'Quote',
372 'Author'
373 ] );
374 Helpers::register_copy_button_style_section( $this );
375 }
376
377 }