PluginProbe
Copy Anything to Clipboard for WordPress – Copy Button, Copy Text & Copy Code / 4.0.4
Copy Anything to Clipboard for WordPress – Copy Button, Copy Text & Copy Code v4.0.4
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 4.0.4, at classes/elementor/widgets/code-snippet/widget.php

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