PluginProbe ʕ •ᴥ•ʔ
reCaptcha by BestWebSoft / 1.38
reCaptcha by BestWebSoft v1.38
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 7 years ago pre-api-script.js 7 years ago script.js 7 years ago
script.js
268 lines
1 ( function( $, gglcptch ) {
2 gglcptch = gglcptch || {};
3
4 gglcptch.prepare = function() {
5 /*
6 * display reCaptcha for plugin`s block
7 */
8 $( '.gglcptch_v1, .gglcptch_v2, .gglcptch_invisible' ).each( function() {
9 var container = $( this ).find( '.gglcptch_recaptcha' );
10 if (
11 container.is( ':empty' ) &&
12 ( gglcptch.vars.visibility || $( this ).is( ':visible' ) === $( this ).is( ':not(:hidden)' ) )
13 ) {
14 var containerId = container.attr( 'id' );
15 gglcptch.display( containerId );
16 }
17 } );
18
19 /*
20 * display reCaptcha for others blocks
21 * this part is neccessary because
22 * we have disabled the connection to Google reCaptcha API from other plugins
23 * via plugin`s php-functionality
24 */
25 if ( 'v2' == gglcptch.options.version || 'invisible' == gglcptch.options.version ) {
26 $( '.g-recaptcha' ).each( function() {
27 /* reCAPTCHA will be generated into the empty block only */
28 if ( $( this ).html() === '' && $( this ).text() === '' ) {
29
30 /* get element`s ID */
31 var container = $( this ).attr( 'id' );
32
33 if ( typeof container == 'undefined' ) {
34 container = get_id();
35 $( this ).attr( 'id', container );
36 }
37
38 /* get reCapatcha parameters */
39 var sitekey = $( this ).attr( 'data-sitekey' ),
40 theme = $( this ).attr( 'data-theme' ),
41 lang = $( this ).attr( 'data-lang' ),
42 size = $( this ).attr( 'data-size' ),
43 type = $( this ).attr( 'data-type' ),
44 tabindex = $( this ).attr( 'data-tabindex' ),
45 callback = $( this ).attr( 'data-callback' ),
46 ex_call = $( this ).attr( 'data-expired-callback' ),
47 stoken = $( this ).attr( 'data-stoken' ),
48 params = [];
49
50 params['sitekey'] = sitekey ? sitekey : gglcptch.options.sitekey;
51 if ( !! theme ) {
52 params['theme'] = theme;
53 }
54 if ( !! lang ) {
55 params['lang'] = lang;
56 }
57 if ( !! size ) {
58 params['size'] = size;
59 }
60 if ( !! type ) {
61 params['type'] = type;
62 }
63 if ( !! tabindex ) {
64 params['tabindex'] = tabindex;
65 }
66 if ( !! callback ) {
67 params['callback'] = callback;
68 }
69 if ( !! ex_call ) {
70 params['expired-callback'] = ex_call;
71 }
72 if ( !! stoken ) {
73 params['stoken'] = stoken;
74 }
75
76 gglcptch.display( container, false, params );
77 }
78 } );
79
80 /*
81 * count the number of reCAPTCHA blocks in the form
82 */
83 $( 'form' ).each( function() {
84 if ( $( this ).contents().find( 'iframe[title="recaptcha widget"]' ).length > 1 && ! $( this ).children( '.gglcptch_dublicate_error' ).length ) {
85 $( this ).prepend( '<div class="gglcptch_dublicate_error error" style="color: red;">' + gglcptch.options.error + '</div><br />\n' );
86 }
87 } );
88 }
89 };
90
91 gglcptch.display = function( container, v1_add_to_last_element, params ) {
92 if ( typeof( container ) == 'undefined' || container == '' || typeof( gglcptch.options ) == 'undefined' ) {
93 return;
94 }
95
96 function storeEvents( el ) {
97 var target = el,
98 events = $._data( el.get( 0 ), 'events' );
99 /* restoring events */
100 if ( typeof events != 'undefined' ) {
101 var storedEvents = {};
102 $.extend( true, storedEvents, events );
103 target.off();
104 target.data( 'storedEvents', storedEvents );
105 }
106 /* storing and removing onclick action */
107 if ( 'undefined' != typeof target.attr( 'onclick' ) ) {
108 target.attr( 'gglcptch-onclick', target.attr( 'onclick') );
109 target.removeAttr( 'onclick' );
110 }
111 }
112
113 function restoreEvents( el ) {
114 var target = el,
115 events = target.data( 'storedEvents' );
116 /* restoring events */
117 if ( typeof events != 'undefined' ) {
118 for ( var event in events ) {
119 for ( var i = 0; i < events[event].length; i++ ) {
120 target.on( event, events[event][i] );
121 }
122 }
123 }
124 /* reset stored events */
125 target.removeData( 'storedEvents' );
126 /* restoring onclick action */
127 if ( 'undefined' != typeof target.attr( 'gglcptch-onclick' ) ) {
128 target.attr( 'onclick', target.attr( 'gglcptch-onclick' ) );
129 target.removeAttr( 'gglcptch-onclick' );
130 }
131 }
132
133 function storeOnSubmit( form, gglcptch_index ) {
134 form.on( 'submit', function( e ) {
135 if ( '' == form.find( '.g-recaptcha-response' ).val() ) {
136 e.preventDefault();
137 e.stopImmediatePropagation();
138 targetObject = $( e.target || e.srcElement || e.targetObject );
139 targetEvent = e.type;
140 grecaptcha.execute( gglcptch_index );
141 }
142 } ).find( 'input:submit, button' ).on( 'click', function( e ) {
143 if ( '' == form.find( '.g-recaptcha-response' ).val() ) {
144 e.preventDefault();
145 e.stopImmediatePropagation();
146 targetObject = $( e.target || e.srcElement || e.targetObject );
147 targetEvent = e.type;
148 grecaptcha.execute( gglcptch_index );
149 }
150 } );
151 }
152
153 var gglcptch_version = gglcptch.options.version;
154 v1_add_to_last_element = v1_add_to_last_element || false;
155
156 if ( 'v1' == gglcptch_version ) {
157 if ( Recaptcha.widget == null || v1_add_to_last_element == true ) {
158 Recaptcha.create( gglcptch.options.sitekey, container, { 'theme' : gglcptch.options.theme } );
159 }
160 }
161
162 if ( 'v2' == gglcptch_version ) {
163 if ( $( '#' + container ).parent().width() <= 300 ) {
164 var size = 'compact';
165 } else {
166 var size = 'normal';
167 }
168 var parameters = params ? params : { 'sitekey' : gglcptch.options.sitekey, 'theme' : gglcptch.options.theme, 'size' : size },
169 gglcptch_index = grecaptcha.render( container, parameters );
170 $( '#' + container ).data( 'gglcptch_index', gglcptch_index );
171 }
172
173 if ( 'invisible' == gglcptch_version ) {
174 var block = $( '#' + container ),
175 form = block.closest( 'form' ),
176 parameters = params ? params : { 'sitekey' : gglcptch.options.sitekey, 'size' : 'invisible', 'tabindex' : 9999 },
177 targetObject = false,
178 targetEvent = false;
179
180 if ( form.length ) {
181 storeEvents( form );
182 form.find( 'button, input:submit' ).each( function() {
183 storeEvents( $( this ) );
184 } );
185
186 /* Callback function works only in frontend */
187 if ( ! $( 'body' ).hasClass( 'wp-admin' ) ) {
188 parameters['callback'] = function( token ) {
189 form.off();
190 restoreEvents( form );
191 form.find( 'button, input:submit' ).off().each( function() {
192 restoreEvents( $( this ) );
193 } );
194 if ( targetObject && targetEvent ) {
195 targetObject.trigger( targetEvent );
196 }
197 form.find( 'button, input:submit' ).each( function() {
198 storeEvents( $( this ) );
199 } );
200 storeEvents( form );
201 storeOnSubmit( form, gglcptch_index );
202 grecaptcha.reset( gglcptch_index );
203 };
204 }
205
206 var gglcptch_index = grecaptcha.render( container, parameters );
207 block.data( { 'gglcptch_index' : gglcptch_index } );
208
209 if ( ! $( 'body' ).hasClass( 'wp-admin' ) ) {
210 storeOnSubmit( form, gglcptch_index );
211 }
212 }
213 }
214 };
215
216 $( document ).ready( function() {
217 var tryCounter = 0,
218 /* launching timer so that the function keeps trying to display the reCAPTCHA again and again until google js api is loaded */
219 gglcptch_timer = setInterval( function() {
220 if ( typeof Recaptcha != "undefined" || typeof grecaptcha != "undefined" ) {
221 try {
222 gglcptch.prepare();
223 } catch ( e ) {
224 console.log( 'Unexpected error occurred: ', e );
225 }
226 clearInterval( gglcptch_timer );
227 }
228 tryCounter++;
229 /* Stop trying after 10 times */
230 if ( tryCounter >= 10 ) {
231 clearInterval( gglcptch_timer );
232 }
233 }, 1000 );
234
235 function gglcptch_prepare() {
236 if ( typeof Recaptcha != "undefined" || typeof grecaptcha != "undefined" ) {
237 try {
238 gglcptch.prepare();
239 } catch ( err ) {
240 console.log( err );
241 }
242 }
243 }
244
245 $( window ).on( 'load', gglcptch_prepare );
246
247 $( '.woocommerce' ).on( 'click', '.woocommerce-tabs', gglcptch_prepare );
248
249 $( '#recaptcha_widget_div' ).on( 'input paste change', '#recaptcha_response_field', cleanError );
250 } );
251
252 function cleanError() {
253 $error = $( this ).parents( '#recaptcha_widget_div' ).next( '#gglcptch_error' );
254 if ( $error.length ) {
255 $error.remove();
256 }
257 }
258
259 function get_id() {
260 var id = 'gglcptch_recaptcha_' + Math.floor( Math.random() * 1000 );
261 if ( $( '#' + id ).length ) {
262 id = get_id();
263 } else {
264 return id;
265 }
266 }
267
268 } )( jQuery, gglcptch );