PageSourceSearch

https://osenterprise.com.pe/wp-content/plugins/copy-the-code/assets/js/copy-the-code.js?ver=4.0.5

js osenterprise.com.pe collected 2026-09-24 14:05:57 UTC 13,139 bytes, 474 lines download raw bytes

1window.CopyTheCodeToClipboard = (function (window, document, navigator) {
2	var textArea,
3		copy;
4
5	function isOS() {
6		return navigator.userAgent.match( /ipad|iphone/i );
7	}
8
9	function createTextArea(text) {
10		textArea       = document.createElement( 'textArea' );
11		textArea.value = text;
12		document.body.appendChild( textArea );
13	}
14
15	function selectText() {
16		var range,
17			selection;
18
19		if (isOS()) {
20			range = document.createRange();
21			range.selectNodeContents( textArea );
22			selection = window.getSelection();
23			selection.removeAllRanges();
24			selection.addRange( range );
25			textArea.setSelectionRange( 0, 999999 );
26		} else {
27			textArea.select();
28		}
29	}
30
31	function copyToClipboard() {
32		document.execCommand( 'copy' );
33		document.body.removeChild( textArea );
34
35		// Redirect to page.
36		if ( copyTheCode.redirect_url ) {
37			window.location.href = copyTheCode.redirect_url;
38		}
39	}
40
41	copy = function (text) {
42		createTextArea( text );
43		selectText();
44		copyToClipboard();
45	};
46
47	return {
48		copy: copy
49	};
50})( window, document, navigator );
51
52(function ($) {
53
54	CopyTheCode = {
55
56		selector: copyTheCode.settings.selector || copyTheCode.selector || 'pre',
57		button_position: copyTheCode.settings['button-position'] || 'inside',
58
59		/**
60		 * Init
61		 */
62		init: function () {
63			this._bind();
64			this._initialize();
65		},
66
67		/**
68		 * Binds events
69		 */
70		_bind: function () {
71			$( document ).on( 'click', '.copy-the-code-button', CopyTheCode.copyCode );
72			$( document ).on( 'click', '.copy-the-code-shortcode', CopyTheCode.copyShortcode );
73		},
74
75		/**
76		 * Initialize the Button
77		 */
78		_initialize: function () {
79			if ( ! $( copyTheCode.selectors ).length) {
80				return;
81			}
82
83			$( copyTheCode.selectors ).each(
84				function (index, el) {
85					var button_copy_text = el['button_copy_text'] || '';
86					var button_position  = el['button_position'] || '';
87					var button_text      = el['button_text'] || '';
88					var button_title     = el['button_title'] || '';
89					var selector         = el['selector'] || '';
90					var style            = el['style'] || '';
91					var copy_format      = el['copy_format'] || '';
92
93					$( selector ).each(
94						function (index, single_selector) {
95
96							var buttonMarkup = CopyTheCode._getButtonMarkup( button_title, button_text, style );
97
98							$( single_selector ).addClass( 'copy-the-code-target' );
99
100							if ('cover' !== style && 'outside' === button_position) {
101								$( single_selector ).wrap( '<span data-copy-format="' + copy_format + '" data-button-text="' + button_text + '" data-button-position="' + button_position + '" data-button-copy-text="' + button_copy_text + '" data-style="' + style + '" data-button-title="' + button_title + '" data-selector="' + selector + '" class="copy-the-code-wrap copy-the-code-style-' + style + ' copy-the-code-outside-wrap"></span>' );
102								$( single_selector ).parent().prepend( '<div class="copy-the-code-outside">' + buttonMarkup + '</div>' );
103							} else {
104								$( single_selector ).wrap( '<span data-copy-format="' + copy_format + '" data-button-text="' + button_text + '" data-button-position="' + button_position + '" data-button-copy-text="' + button_copy_text + '" data-style="' + style + '" data-button-title="' + button_title + '" data-selector="' + selector + '" class="copy-the-code-wrap copy-the-code-style-' + style + ' copy-the-code-inside-wrap"></span>' );
105								$( single_selector ).append( buttonMarkup );
106							}
107
108							switch (style) {
109								case 'svg-icon':
110									$( single_selector ).find( '.copy-the-code-button' ).html( copyTheCode.buttonSvg );
111									break;
112								case 'cover':
113								case 'button':
114								default:
115									$( single_selector ).find( '.copy-the-code-button' ).html( button_text );
116									break;
117							}
118
119						}
120					);
121				}
122			);
123
124		},
125
126		/**
127		 * Get Copy Button Markup
128		 */
129		_getButtonMarkup: function (button_title, button_text, style) {
130			if ('svg-icon' === style) {
131				button_text = copyTheCode.buttonSvg;
132			}
133
134			return '<button class="copy-the-code-button" data-style="' + style + '" title="' + button_title + '">' + button_text + '</button>';
135		},
136
137		format: function (html) {
138			var tab    = '\t';
139			var result = '';
140			var indent = '';
141
142			html.split( />\s*</ ).forEach(
143				function (element) {
144					if (element.match( /^\/\w/ )) {
145						indent = indent.substring( tab.length );
146					}
147
148					result += indent + '<' + element + '>\r\n';
149
150					if (element.match( /^<?\w[^>]*[^\/]$/ ) && ! element.startsWith( "input" )) {
151						indent += tab;
152					}
153				}
154			);
155
156			return result.substring( 1, result.length - 3 );
157		},
158
159		/**
160		 * Copy to Clipboard
161		 */
162		copyShortcode: function (event) {
163			event.preventDefault();
164
165			var btn              = $( this ),
166				oldText          = btn.html(),
167				target           = btn.attr( 'data-target' ) || '',
168				copy_content_as  = btn.attr( 'data-copy-as' ) || copyTheCode.copy_content_as,
169				button_copy_text = btn.attr( 'data-button-copy-text' ) || '',
170				content          = btn.attr( 'data-content' ) || '',
171				link             = btn.attr( 'data-link' ) || '';
172
173			// Copy the secrate content.
174			if (content) {
175				CopyTheCodeToClipboard.copy( content );
176				// Copied!
177				btn.text( button_copy_text );
178				setTimeout(
179					function () {
180						btn.html( oldText );
181
182						if ( link ) {
183							window.open( link, '_blank' ).focus()
184						}
185					},
186					1000
187				);
188				return;
189			}
190
191			var source = $( target );
192
193			if ( ! source.length) {
194				btn.text( 'Not found!' );
195				setTimeout(
196					function () {
197						btn.text( oldText );
198					},
199					1000
200				);
201				return;
202			}
203
204			var html = source.html();
205
206			html = CopyTheCode.format( html );
207
208			if ('html' !== copy_content_as) {
209
210				// Convert the <br/> tags into new line.
211				var brRegex = /<br\s*[\/]?>/gi;
212				html        = html.replace( brRegex, "\n" );
213
214				// Convert the <div> tags into new line.
215				var divRegex = /<div\s*[\/]?>/gi;
216				html         = html.replace( divRegex, "\n" );
217
218				// Convert the <p> tags into new line.
219				var pRegex = /<p\s*[\/]?>/gi;
220				html       = html.replace( pRegex, "\n" );
221
222				// Convert the <li> tags into new line.
223				var pRegex = /<li\s*[\/]?>/gi;
224				html       = html.replace( pRegex, "\n" );
225
226				// Remove all tags.
227				html = html.replace( /(<([^>]+)>)/ig, '' );
228			}
229
230			if ('html' !== copy_content_as) {
231				html = html.replace( /[\t\n]+/gm, ' ' ).trim();
232			} else {
233				var reWhiteSpace = new RegExp( "/^\s+$/" );
234				html             = html.replace( reWhiteSpace, "" );
235			}
236
237			var tempElement = $( "<div id='temp-element'></div>" );
238			$( "body" ).append( tempElement );
239			html = $.trim( html );
240			$( '#temp-element' ).html( html );
241			var html = $( '#temp-element' ).html();
242			$( '#temp-element' ).remove();
243
244			var tempHTML = html;
245
246			// Copy the Code.
247			var tempPre = $( "<textarea id='temp-pre'>" ),
248				temp    = $( "<textarea>" );
249
250			// Append temporary elements to DOM.
251			$( "body" ).append( temp );
252			$( "body" ).append( tempPre );
253
254			// Set temporary HTML markup.
255			tempPre.html( tempHTML );
256
257			var content = tempPre.text();
258
259			content = content.trim();
260
261			if ( copyTheCode.trim_lines ) {
262				content = content.replace( /^(?=\n)$|\s*$|\n\n+/gm,"" );
263				if ( content ) {
264					content = content.split( '\n' );
265					content = content.map(
266						item => {
267                        return item.trim();
268						}
269					);
270					content = content.join( '\n' );
271				}
272			}
273
274			// Format the HTML markup.
275			temp.val( content ).select();
276
277			// Support for IOS devices too.
278			CopyTheCodeToClipboard.copy( content.trim() );
279
280			// Remove temporary elements.
281			temp.remove();
282			tempPre.remove();
283
284			// Copied!
285			btn.text( button_copy_text );
286			setTimeout(
287				function () {
288					btn.text( oldText );
289				},
290				1000
291			);
292		},
293
294		/**
295		 * Copy to Clipboard
296		 */
297		copyCode: function (event) {
298			event.preventDefault();
299
300			var btn              = $( this ),
301				oldText          = btn.text(),
302				parent           = btn.parents( '.copy-the-code-wrap' ),
303				selector         = parent.attr( 'data-selector' ) || '',
304				button_text      = parent.attr( 'data-button-text' ) || '',
305				button_position  = parent.attr( 'data-button-position' ) || '',
306				button_copy_text = parent.attr( 'data-button-copy-text' ) || '',
307				button_title     = parent.attr( 'data-button-title' ) || '',
308				style            = parent.attr( 'data-style' ) || ''
309				copy_format      = parent.attr( 'data-copy-format' ) || '';
310
311			// Fix: nested selectors e.g. `.entry-content pre`
312			if (selector.indexOf( ' ' ) >= 0) {
313				var source = btn.parents( '.copy-the-code-wrap' );
314			} else {
315				var source = btn.parents( '.copy-the-code-wrap' ).find( selector );
316			}
317
318			if ( 'google-docs' === copy_format ) {
319				// Hide button temporary.
320				if ( 'inside' === button_position ) {
321					$( '.copy-the-code-button' ).hide();
322				}
323
324				var range = document.createRange();
325				range.selectNode( source[0] );
326				window.getSelection().addRange( range );
327				document.execCommand( 'copy' );
328
329				// Clear selection.
330				if (window.getSelection) {
331					if (window.getSelection().empty) {  // Chrome
332						window.getSelection().empty();
333					} else if (window.getSelection().removeAllRanges) {  // Firefox
334						window.getSelection().removeAllRanges();
335					}
336				} else if (document.selection) {  // IE?
337					document.selection.empty();
338				}
339
340				// Show button again.
341				if ( 'inside' === button_position ) {
342					$( '.copy-the-code-button' ).show();
343				}
344
345			} else {
346
347				var html = source.html();
348
349				var buttonMarkup = CopyTheCode._getButtonMarkup( button_title, button_text, style );
350
351				// Remove the <copy> button.
352				html = html.replace( buttonMarkup, '' );
353
354				// Emojis.
355				let allEmojis = CopyTheCode._getImages( html );
356
357				if ( allEmojis ) {
358					allEmojis.map(
359						function(image) {
360							let alt = CopyTheCode._getAlt( image );
361							if ( alt ) {
362								  let cleanAlt = alt[0];
363								  cleanAlt     = cleanAlt.replaceAll( '"', '' );
364								  cleanAlt     = cleanAlt.replaceAll( "'", '' );
365								  cleanAlt     = cleanAlt.replaceAll( 'alt=', '' );
366								  html         = html.replaceAll( image, cleanAlt );
367							}
368						}
369					);
370
371				}
372
373				// Remove all duplicate empty lines.
374				if ( copyTheCode.remove_spaces ) {
375					html = html.replace( /^(?=\n)$|\s*$|\n\n+/gm,"" );
376				}
377
378				if ('html' !== copyTheCode.copy_content_as) {
379					// Convert the <br/> tags into new line.
380					var brRegex = /<br\s*[\/]?>/gi;
381					html        = html.replace( brRegex, "\n" );
382
383					// Convert the <div> tags into new line.
384					var divRegex = /<div\s*[\/]?>/gi;
385					html         = html.replace( divRegex, "\n" );
386
387					// Convert the <p> tags into new line.
388					var pRegex = /<p\s*[\/]?>/gi;
389					html       = html.replace( pRegex, "\n" );
390
391					// Convert the <li> tags into new line.
392					var pRegex = /<li\s*[\/]?>/gi;
393					html       = html.replace( pRegex, "\n" );
394
395					// Remove all tags.
396					html = html.replace( /(<([^>]+)>)/ig, '' );
397				}
398
399				// Remove white spaces.
400				var reWhiteSpace = new RegExp( "/^\s+$/" );
401				html             = html.replace( reWhiteSpace, "" );
402
403				var tempElement = $( "<div id='temp-element'></div>" );
404				$( "body" ).append( tempElement );
405				html = $.trim( html );
406				$( '#temp-element' ).html( html );
407				var html = $( '#temp-element' ).html();
408				$( '#temp-element' ).remove();
409
410				var tempHTML     = html;
411				var reWhiteSpace = new RegExp( "/^\s+$/" );
412				tempHTML         = tempHTML.replace( reWhiteSpace, "" );
413
414				// Remove button text.
415				tempHTML = tempHTML.replace( button_text, '' );
416
417				// Copy the Code.
418				var tempPre = $( "<textarea id='temp-pre'>" ),
419					temp    = $( "<textarea>" );
420
421				// Append temporary elements to DOM.
422				$( "body" ).append( temp );
423				$( "body" ).append( tempPre );
424
425				// Set temporary HTML markup.
426				var content = tempPre.html( tempHTML ).text();
427
428				content = $.trim( content );
429
430				// Format the HTML markup.
431				temp.val( content ).select();
432
433				// Support for IOS devices too.
434				CopyTheCodeToClipboard.copy( content );
435
436				// Remove temporary elements.
437				temp.remove();
438				tempPre.remove();
439			}
440
441			// Copied!
442			btn.text( button_copy_text );
443			setTimeout(
444				function () {
445					if ('svg-icon' === style) {
446						btn.html( copyTheCode.buttonSvg );
447					} else {
448						btn.text( oldText );
449					}
450				},
451				1000
452			);
453		},
454
455		_getImages( content ) {
456			return content.match( /<img\s+[^>]*?src=("|')([^"']+)">/gi );
457		},
458
459		_getAlt( img ) {
460			return img.match( /alt=("|')([^"']+)"|'/gi );
461		}
462
463	};
464
465	/**
466	 * Initialization
467	 */
468	$(
469		function () {
470			CopyTheCode.init();
471		}
472	);
473
474})( jQuery );

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.