PluginProbe ʕ •ᴥ•ʔ
reCaptcha by BestWebSoft / trunk
reCaptcha by BestWebSoft vtrunk
1.79 1.80 1.82 1.83 1.84 1.85 1.86 1.87 trunk 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.20 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.30 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.40 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.50 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.60 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.70 1.71 1.72 1.73 1.74 1.75 1.78
google-captcha / js / script.js
google-captcha / js Last commit date
admin_script.js 4 months ago pre-api-script.js 8 years ago script.js 6 months ago
script.js
260 lines
1 ( function( $, gglcptch ) {
2 gglcptch = gglcptch || {};
3
4 gglcptch.prepare = function() {
5 /*
6 * display reCaptcha for plugin`s block
7 */
8 $( '.gglcptch_v2, .gglcptch_invisible' ).each( function() {
9
10 var container = $( this ).find( '.gglcptch_recaptcha' );
11
12 if (
13 container.is( ':empty' ) &&
14 ( gglcptch.vars.visibility || $( this ).is( ':visible' ) === $( this ).is( ':not(:hidden)' ) )
15 ) {
16 var containerId = container.attr( 'id' );
17 gglcptch.display( containerId );
18 }
19 } );
20
21 if ( 'v3' == gglcptch.options.version ) {
22 grecaptcha.ready( function() {
23 grecaptcha.execute( gglcptch.options.sitekey, {action: 'BWS_reCaptcha'}).then(function( token ) {
24 document.querySelectorAll( "#g-recaptcha-response" ).forEach( function ( elem ) { elem.value = token } );
25 if ( ! $( 'body' ).hasClass( 'wp-admin' ) ) {
26 var gglcptchTimeout = setTimeout( function(){
27 $( '.gglcptch_error_text' ).each( function(){
28 $( this ).show();
29 clearTimeout( gglcptchTimeout );
30 });
31 }, 180000 );
32 }
33 });
34 });
35 }
36
37 /*
38 * display reCaptcha for others blocks
39 * this part is neccessary because
40 * we have disabled the connection to Google reCaptcha API from other plugins
41 * via plugin`s php-functionality
42 */
43 if ( 'v2' == gglcptch.options.version || 'invisible' == gglcptch.options.version ) {
44 /*
45 * count the number of reCAPTCHA blocks in the form
46 */
47 $( 'form' ).each( function() {
48 if ( $( this ).contents().find( 'iframe[title="recaptcha widget"]' ).length > 1 && ! $( this ).children( '.gglcptch_dublicate_error' ).length ) {
49 $( this ).prepend( '<div class="gglcptch_dublicate_error error" style="color: red;">' + gglcptch.options.error + '</div><br />\n' );
50 }
51 } );
52 }
53 };
54
55 gglcptch.display = function( container, params ) {
56 if ( typeof( container ) == 'undefined' || container == '' || typeof( gglcptch.options ) == 'undefined' ) {
57 return;
58 }
59
60 if ( 'v2' === gglcptch.options.version && $( '#' + container ).parents( '.gglcptch_custom' ).length > 0 ) {
61 if ( $( '#' + container ).find( 'textarea#g-recaptcha-response' ).length == 0 ) {
62 setTimeout(
63 function(){
64 $( '#' + container ).find( 'textarea#g-recaptcha-response' ).remove();
65 },
66 1000
67 );
68 } else {
69 $( '#' + container ).find( 'textarea#g-recaptcha-response' ).remove();
70 }
71 $( '.gglcptch.gglcptch_v2 noscript' ).remove();
72 }
73
74 // add attribute disable to the submit
75 if ( 'v2' === gglcptch.options.version && gglcptch.options.disable ) {
76 $( '#' + container ).closest( 'form' ).find( 'input:submit, button' ).prop( 'disabled', true );
77 if ( 'setupform' === $( '#' + container ).closest( 'form' ).attr( 'id' ) ) {
78 setTimeout(
79 function(){
80 $( '#' + container ).closest( 'form' ).find( 'input:submit, button' ).prop( 'disabled', true );
81 },
82 200
83 );
84 }
85 }
86
87 function storeEvents( el ) {
88 var target = el,
89 events = $._data( el.get( 0 ), 'events' );
90 /* restoring events */
91 if ( typeof events != 'undefined' ) {
92 var storedEvents = {};
93 $.extend( true, storedEvents, events );
94 target.off();
95 target.data( 'storedEvents', storedEvents );
96 }
97 /* storing and removing onclick action */
98 if ( 'undefined' != typeof target.attr( 'onclick' ) ) {
99 target.attr( 'gglcptch-onclick', target.attr( 'onclick') );
100 target.removeAttr( 'onclick' );
101 }
102 }
103
104 function restoreEvents( el ) {
105 var target = el,
106 events = target.data( 'storedEvents' );
107 /* restoring events */
108 if ( typeof events != 'undefined' ) {
109 for ( var event in events ) {
110 for ( var i = 0; i < events[event].length; i++ ) {
111 target.on( event, events[event][i] );
112 }
113 }
114 }
115 /* reset stored events */
116 target.removeData( 'storedEvents' );
117 /* restoring onclick action */
118 if ( 'undefined' != typeof target.attr( 'gglcptch-onclick' ) ) {
119 target.attr( 'onclick', target.attr( 'gglcptch-onclick' ) );
120 target.removeAttr( 'gglcptch-onclick' );
121 }
122 }
123
124 function storeOnSubmit( form, gglcptch_index ) {
125 form.on( 'submit', function( e ) {
126 if ( '' == form.find( '.g-recaptcha-response' ).val() ) {
127 e.preventDefault();
128 e.stopImmediatePropagation();
129 targetObject = $( e.target || e.srcElement || e.targetObject );
130 targetEvent = e.type;
131 grecaptcha.execute( gglcptch_index );
132 }
133 } ).find( 'input:submit, button' ).on( 'click', function( e ) {
134 if ( '' == form.find( '.g-recaptcha-response' ).val() ) {
135 e.preventDefault();
136 e.stopImmediatePropagation();
137 targetObject = $( e.target || e.srcElement || e.targetObject );
138 targetEvent = e.type;
139 grecaptcha.execute( gglcptch_index );
140 }
141 } );
142 }
143
144 var gglcptch_version = gglcptch.options.version;
145
146 if ( 'v2' == gglcptch_version ) {
147 if ( $( '#' + container ).parent().width() <= 300 && $( '#' + container ).parent().width() != 0 || $( window ).width() < 400 ) {
148 var size = 'compact';
149 } else {
150 var size = 'normal';
151 }
152 var parameters = params ? params : { 'sitekey' : gglcptch.options.sitekey, 'theme' : gglcptch.options.theme, 'size' : size },
153 block = $( '#' + container ),
154 form = block.closest( 'form' );
155
156 /* Callback function works only in frontend */
157 if ( ! $( 'body' ).hasClass( 'wp-admin' ) ) {
158 parameters['callback'] = function() {
159 form.find( 'button, input:submit' ).prop( 'disabled', false );
160 };
161 }
162
163 var gglcptch_index = grecaptcha.render( container, parameters );
164 $( '#' + container ).data( 'gglcptch_index', gglcptch_index );
165 } else if ( 'invisible' == gglcptch_version ) {
166 var block = $( '#' + container ),
167 form = block.closest( 'form' ),
168 parameters = params ? params : { 'sitekey' : gglcptch.options.sitekey, 'size' : 'invisible', 'tabindex' : 9999 },
169 targetObject = false,
170 targetEvent = false;
171
172 if ( form.length ) {
173 storeEvents( form );
174 form.find( 'button, input:submit' ).each( function() {
175 storeEvents( $( this ) );
176 } );
177
178 /* Callback function works only in frontend */
179 if ( ! $( 'body' ).hasClass( 'wp-admin' ) ) {
180 parameters['callback'] = function( token ) {
181 form.off();
182 restoreEvents( form );
183 form.find( 'button, input:submit' ).off().each( function() {
184 restoreEvents( $( this ) );
185 } );
186 if ( targetObject && targetEvent ) {
187 targetObject.trigger( targetEvent );
188 }
189 form.find( 'button, input:submit' ).each( function() {
190 storeEvents( $( this ) );
191 } );
192 storeEvents( form );
193 storeOnSubmit( form, gglcptch_index );
194 grecaptcha.reset( gglcptch_index );
195 };
196 }
197
198 var gglcptch_index = grecaptcha.render( container, parameters );
199 block.data( { 'gglcptch_index' : gglcptch_index } );
200
201 if ( ! $( 'body' ).hasClass( 'wp-admin' ) ) {
202 storeOnSubmit( form, gglcptch_index );
203 }
204 }
205 }
206 };
207
208 $( document ).ready( function() {
209 var tryCounter = 0,
210 /* launching timer so that the function keeps trying to display the reCAPTCHA again and again until google js api is loaded */
211 gglcptch_timer = setInterval( function() {
212 if ( typeof Recaptcha != "undefined" || typeof grecaptcha != "undefined" ) {
213 try {
214 gglcptch.prepare();
215 } catch ( e ) {
216 console.log( 'Unexpected error occurred: ', e );
217 }
218 clearInterval( gglcptch_timer );
219 }
220 tryCounter++;
221 /* Stop trying after 10 times */
222 if ( tryCounter >= 10 ) {
223 clearInterval( gglcptch_timer );
224 }
225 }, 1000 );
226
227 function gglcptch_prepare() {
228 if ( typeof Recaptcha != "undefined" || typeof grecaptcha != "undefined" ) {
229 try {
230 gglcptch.prepare();
231 } catch ( err ) {
232 console.log( err );
233 }
234 }
235 }
236
237 $( window ).on( 'load', gglcptch_prepare );
238
239 $( '.woocommerce' ).on( 'click', '.woocommerce-tabs', gglcptch_prepare );
240
241 $( '#recaptcha_widget_div' ).on( 'input paste change', '#recaptcha_response_field', cleanError );
242 } );
243
244 function cleanError() {
245 $error = $( this ).parents( '#recaptcha_widget_div' ).next( '#gglcptch_error' );
246 if ( $error.length ) {
247 $error.remove();
248 }
249 }
250
251 function get_id() {
252 var id = 'gglcptch_recaptcha_' + Math.floor( Math.random() * 1000 );
253 if ( $( '#' + id ).length ) {
254 id = get_id();
255 } else {
256 return id;
257 }
258 }
259
260 } )( jQuery, gglcptch );