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 / assets / js / page.js

page.js in Copy Anything to Clipboard for WordPress – Copy Button, Copy Text & Copy Code 3.4.3, at assets/js/page.js

215 lines 7.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 window.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
36 copy = function(text) {
37 createTextArea(text);
38 selectText();
39 copyToClipboard();
40 };
41
42 return {
43 copy: copy
44 };
45 })(window, document, navigator);
46
47
48 (function($) {
49
50 CopyTheCodePage = {
51
52 /**
53 * Init
54 */
55 init: function()
56 {
57 this._bind();
58 this._preview();
59 $('.copy-the-code .nav-tab-wrapper > .nav-tab:first-child').addClass('nav-tab-active');
60 },
61
62 _bind: function()
63 {
64 $( document ).on('input', '[name="button-text"], [name="button-copy-text"], [name="button-title"]', CopyTheCodePage._preview );
65 $( document ).on('change', '[name="style"], [name="button-position"]', CopyTheCodePage._preview );
66 $( document ).on('click', '.copy-the-code-button', CopyTheCodePage.copyCode );
67 },
68
69 /**
70 * Copy to Clipboard
71 */
72 copyCode: function( event )
73 {
74 var btn = $( this ),
75 preview = $('#preview').find('pre'),
76 source = btn.parents('.copy-the-code-wrap').find( preview ),
77 oldText = btn.text();
78
79 var buttonMarkup = $('.copy-the-code-wrap').html() || '';
80 var copy_as = 'text';
81 var button_text = $( '[name="button-text"]' ).val() || '';
82 var button_copy_text = $( '[name="button-copy-text"]' ).val() || '';
83 var style = $( '[name="style"]' ).val() || 'button';
84
85 if( 'text' === copy_as ) {
86 var html = source.text();
87
88 // Remove the 'copy' text.
89 var tempHTML = html.replace(button_text, '');
90
91 } else {
92 var html = source.html();
93
94 // Remove the <copy> button.
95 var tempHTML = html.replace(buttonMarkup, '');
96 }
97
98
99 // Copy the Code.
100 var tempPre = $("<textarea id='temp-pre'>"),
101 temp = $("<textarea>"),
102 brRegex = '/<br\s*[/\]?>/gi';
103
104 // Append temporary elements to DOM.
105 $("body").append(temp);
106 $("body").append(tempPre);
107
108 // Set temporary HTML markup.
109 tempPre.html( tempHTML );
110
111 // Format the HTML markup.
112 temp.val( tempPre.text().replace(brRegex, "\r\n" ) ).select();
113
114 // Support for IOS devices too.
115 CopyTheCodeToClipboard.copy( tempPre.text().replace(brRegex, "\r\n" ) );
116
117 // Remove temporary elements.
118 temp.remove();
119 tempPre.remove();
120
121 // Copied!
122 btn.text( button_copy_text );
123 setTimeout(function() {
124 if( 'svg-icon' === style ) {
125 btn.html( copyTheCode.buttonSvg );
126 } else {
127 btn.text( oldText );
128 }
129 }, 1000);
130 },
131
132 _preview: function() {
133 var button_position = $( '[name="button-position"]' ).val() || '';
134 // var value = $( 'select[name="copy-as"]' ).children("option:selected").val() || '';
135 var style = $( '[name="style"]' ).val() || 'button';
136 var button_text = $( '[name="button-text"]' ).val() || '';
137 var button_copy_text = $( '[name="button-copy-text"]' ).val() || '';
138 var button_title = $( '[name="button-title"]' ).val() || '';
139 var buttonMarkup = copyTheCode.buttonMarkup || '';
140
141 var markup = '<div class="outer">';
142 markup += '<div class="inner copy-as-text">';
143 markup += '<p>Sample Preview 1</p>';
144 markup += '<pre id="pre-html"></pre>';
145 markup += '</div>';
146
147 markup += '<div class="inner copy-as-html">';
148 markup += '<p>Sample Preview 2</p>';
149 markup += '<pre id="pre-text"></pre>';
150 markup += '</div>';
151
152 markup += '</div>';
153
154 $('#preview').html( markup );
155 $('#preview #pre-html').html( copyTheCode.previewMarkup );
156 $('#preview #pre-text').text( copyTheCode.previewMarkup );
157
158 if( 'cover' !== style && 'outside' === button_position ) {
159 $('#preview pre').wrap( '<span class="copy-the-code-style-' + style + ' copy-the-code-wrap copy-the-code-outside-wrap"></span>' );
160 $('#preview pre').parent().prepend('<div class="copy-the-code-outside">' + buttonMarkup + '</div>');
161 } else {
162 $('#preview pre').wrap( '<span class="copy-the-code-style-' + style + ' copy-the-code-wrap copy-the-code-inside-wrap"></span>' );
163 $('#preview pre').append( buttonMarkup );
164 }
165
166 $('#preview').find( '.copy-the-code-button').attr('title', button_title);
167 $('#preview').find( '.copy-the-code-button').attr( 'style', style);
168
169 if( 'svg-icon' === style ) {
170 $( '[name="button-text"]' ).parents('tr').hide();
171 $( '[name="button-position"]' ).parents('tr').hide();
172 } else {
173 $( '[name="button-text"]' ).parents('tr').show();
174 $( '[name="button-position"]' ).parents('tr').show();
175 }
176 if( 'cover' === style ) {
177 $( '[name="button-position"]' ).parents('tr').hide();
178 } else {
179 $( '[name="button-position"]' ).parents('tr').show();
180 }
181
182 switch( style ) {
183 case 'svg-icon':
184 $('#preview').find( '.copy-the-code-button').html( copyTheCode.buttonSvg );
185 break;
186 case 'cover':
187 case 'button':
188 default:
189 $('#preview').find( '.copy-the-code-button').html( button_text );
190 break;
191 }
192
193 $( document ).trigger( 'copy-the-code-style-change', style );
194
195 },
196
197 _switch_tab: function( event ) {
198 $(this).siblings().removeClass('nav-tab-active');
199 $(this).addClass('nav-tab-active');
200 $( '#' + $(this).attr( 'data-id' ) ).siblings().hide();
201 $( '#' + $(this).attr( 'data-id' ) ).show();
202 }
203
204 };
205
206 /**
207 * Initialization
208 */
209 $(function() {
210 CopyTheCodePage.init();
211 });
212
213 })(jQuery);
214
215