PluginProbe
weForms – Easy Drag & Drop Contact Form Builder For WordPress / 1.6.7
weForms – Easy Drag & Drop Contact Form Builder For WordPress v1.6.7
1.6.7 1.6.8 1.6.9 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.18 1.6.19 1.6.2 1.6.20 1.6.21 1.6.22 1.6.23 1.6.24 1.6.25 1.6.26 1.6.27 1.6.28 1.6.3 1.6.4 1.6.5 1.6.6 All 74 releases
weforms / assets / wpuf / js / frontend-form.js

frontend-form.js in weForms – Easy Drag & Drop Contact Form Builder For WordPress 1.6.7, at assets/wpuf/js/frontend-form.js

1,062 lines 42.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 ;(function($, window) {
2
3 $.fn.listautowidth = function() {
4 return this.each(function() {
5 var w = $(this).width();
6 var liw = w / $(this).children('li').length;
7 $(this).children('li').each(function(){
8 var s = $(this).outerWidth(true)-$(this).width();
9 $(this).width(liw-s);
10 });
11 });
12 };
13 $.fn.extend({
14 /**
15 * Custom jQuery serialize wrapper.
16 *
17 * When WordPress 5.6 increased the jQuery version to 3.5.1, the serialize function changed. Instead of
18 * sending spaces as "+", they are sent as "%20". This wrapper is for backwards compatibility.
19 *
20 * @todo This function is duplicated in both the frontend and backend. Need to have the code live in
21 * just one location.
22 *
23 * @since 1.6.7
24 */
25 weSerialize: function() {
26 return $( this ).serialize().replaceAll( '%20', '+' );
27 },
28 });
29 window.WP_User_Frontend = {
30
31 init: function() {
32
33 //enable multistep
34 this.enableMultistep(this);
35
36 // clone and remove repeated field
37 $('.wpuf-form').on('click', 'img.wpuf-clone-field', this.cloneField);
38 $('.wpuf-form').on('click', 'img.wpuf-remove-field', this.removeField);
39 $('.wpuf-form').on('click', 'a.wpuf-delete-avatar', this.deleteAvatar);
40 $('.wpuf-form').on('click', 'a#wpuf-post-draft', this.draftPost);
41 $('.wpuf-form').on('click', 'button#wpuf-account-update-profile', this.account_update_profile);
42
43 $('.wpuf-form-add').on('submit', this.formSubmit);
44 $('form#post').on('submit', this.adminPostSubmit);
45 // $( '.wpuf-form').on('keyup', '#pass1', this.check_pass_strength );
46
47 // refresh pluploads on each step change (multistep form)
48 $('.wpuf-form').on('step-change-fieldset', function(event, number, step) {
49 if ( wpuf_plupload_items.length ) {
50 for (var i = wpuf_plupload_items.length - 1; i >= 0; i--) {
51 wpuf_plupload_items[i].refresh();
52 }
53 }
54 if ( wpuf_map_items.length ) {
55 for (var i = wpuf_map_items.length - 1; i >= 0; i--) {
56 google.maps.event.trigger(wpuf_map_items[i].map, 'resize');
57 wpuf_map_items[i].map.setCenter(wpuf_map_items[i].center);
58 }
59 }
60 });
61
62 this.ajaxCategory();
63 // image insert
64 // this.insertImage();
65
66 //comfirmation alert for canceling subscription
67 $( ':submit[name="wpuf_user_subscription_cancel"]').click(function(e){
68 e.preventDefault();
69
70 swal({
71 text: wpuf_frontend.cancelSubMsg,
72 type: 'warning',
73 showCancelButton: true,
74 confirmButtonColor: '#d54e21',
75 confirmButtonText: wpuf_frontend.delete_it,
76 cancelButtonText: wpuf_frontend.cancel_it,
77 confirmButtonClass: 'btn btn-success',
78 cancelButtonClass: 'btn btn-danger',
79 }).then(function ( isConfirmed ) {
80 if ( !isConfirmed ) {
81 return false;
82 }
83 $('#wpuf_cancel_subscription').submit();
84 });
85 });
86 },
87
88 check_pass_strength : function() {
89 var pass1 = $('#pass1').val(), strength;
90
91 $('#pass-strength-result').show();
92
93 $('#pass-strength-result').removeClass('short bad good strong');
94 if ( ! pass1 ) {
95 $('#pass-strength-result').html( ' ' );
96 $('#pass-strength-result').hide();
97 return;
98 }
99
100 if ( typeof wp.passwordStrength != 'undefined' ) {
101
102 strength = wp.passwordStrength.meter( pass1, wp.passwordStrength.userInputBlacklist(), pass1 );
103
104 switch ( strength ) {
105 case 2:
106 $('#pass-strength-result').addClass('bad').html( pwsL10n.bad );
107 break;
108 case 3:
109 $('#pass-strength-result').addClass('good').html( pwsL10n.good );
110 break;
111 case 4:
112 $('#pass-strength-result').addClass('strong').html( pwsL10n.strong );
113 break;
114 case 5:
115 $('#pass-strength-result').addClass('short').html( pwsL10n.mismatch );
116 break;
117 default:
118 $('#pass-strength-result').addClass('short').html( pwsL10n['short'] );
119 }
120
121 }
122 },
123
124 enableMultistep: function(o) {
125
126 var js_obj = this;
127 var step_number = 0;
128 var progressbar_type = $(':hidden[name="wpuf_multistep_type"]').val();
129
130 if ( progressbar_type == null ) {
131 return;
132 }
133
134 // first fieldset doesn't have prev button,
135 // last fieldset doesn't have next button
136 $('fieldset.wpuf-multistep-fieldset').find('.wpuf-multistep-prev-btn').first().remove();
137 $('fieldset.wpuf-multistep-fieldset').find('.wpuf-multistep-next-btn').last().remove();
138
139 // at first first fieldset will be shown, and others will be hidden
140 $('.wpuf-form fieldset').removeClass('field-active').first().addClass('field-active');
141
142 if ( progressbar_type == 'progressive' && $('.wpuf-form .wpuf-multistep-fieldset').length != 0 ) {
143
144 var firstLegend = $('fieldset.wpuf-multistep-fieldset legend').first();
145 $('.wpuf-multistep-progressbar').html('<div class="wpuf-progress-percentage"></div>' );
146
147 var progressbar = $( ".wpuf-multistep-progressbar" ),
148 progressLabel = $( ".wpuf-progress-percentage" );
149
150 $( ".wpuf-multistep-progressbar" ).progressbar({
151 change: function() {
152 progressLabel.text( progressbar.progressbar( "value" ) + "%" );
153 }
154 });
155
156 $('.wpuf-multistep-fieldset legend').hide();
157
158 } else {
159 $('.wpuf-form').each(function() {
160 var this_obj = $(this);
161 var progressbar = $('.wpuf-multistep-progressbar', this_obj);
162 var nav = '';
163
164 progressbar.addClass('wizard-steps');
165 nav += '<ul class="wpuf-step-wizard">';
166
167 $('.wpuf-multistep-fieldset', this).each(function(){
168 nav += '<li>' + $.trim( $('legend', this).text() ) + '</li>';
169 $('legend', this).hide();
170 });
171
172 nav += '</ul>';
173 progressbar.append( nav );
174
175 $('.wpuf-step-wizard li', progressbar).first().addClass('active-step');
176 $('.wpuf-step-wizard', progressbar).listautowidth();
177 });
178 }
179
180 this.change_fieldset(step_number, progressbar_type);
181
182 $('fieldset .wpuf-multistep-prev-btn, fieldset .wpuf-multistep-next-btn').click(function(e) {
183 // js_obj.formSubmit();
184 if ( $(this).hasClass('wpuf-multistep-next-btn') ) {
185 var result = js_obj.formStepCheck( '', $(this).closest('fieldset') );
186
187 if ( result != false ) {
188 o.change_fieldset(++step_number,progressbar_type);
189 }
190
191 } else if ( $(this).hasClass('wpuf-multistep-prev-btn') ) {
192 o.change_fieldset( --step_number,progressbar_type );
193 }
194
195 var formDiv = $( "form.wpuf-form-add" );
196 var position = formDiv.offset().top;
197
198 // this changes the scrolling behavior to "smooth"
199 window.scrollTo({
200 top: position - 32,
201 behavior: "smooth"
202 });
203
204 return false;
205 });
206 },
207
208 change_fieldset: function(step_number, progressbar_type) {
209 var current_step = $('fieldset.wpuf-multistep-fieldset').eq(step_number);
210
211 $('fieldset.wpuf-multistep-fieldset').removeClass('field-active').eq(step_number).addClass('field-active');
212
213 $('.wpuf-step-wizard li').each(function(){
214 if ( $(this).index() <= step_number ){
215 progressbar_type == 'step_by_step'? $(this).addClass('passed-wpuf-ms-bar') : $('.wpuf-ps-bar',this).addClass('passed-wpuf-ms-bar');
216 } else {
217 progressbar_type == 'step_by_step'? $(this).removeClass('passed-wpuf-ms-bar') : $('.wpuf-ps-bar',this).removeClass('passed-wpuf-ms-bar');
218 }
219 });
220
221 $('.wpuf-step-wizard li').removeClass('wpuf-ms-bar-active active-step completed-step');
222 $('.passed-wpuf-ms-bar').addClass('completed-step').last().addClass('wpuf-ms-bar-active');
223 $('.wpuf-ms-bar-active').addClass('active-step');
224
225 var legend = $('fieldset.wpuf-multistep-fieldset').eq(step_number).find('legend').text();
226 legend = $.trim( legend );
227
228 if ( progressbar_type == 'progressive' && $('.wpuf-form .wpuf-multistep-fieldset').length != 0 ) {
229 var progress_percent = ( step_number + 1 ) * 100 / $('fieldset.wpuf-multistep-fieldset').length ;
230 var progress_percent = Number( progress_percent.toFixed(2) );
231 $( ".wpuf-multistep-progressbar" ).progressbar({value: progress_percent });
232 $( '.wpuf-progress-percentage' ).text( legend + ' (' + progress_percent + '%)');
233 }
234
235 // trigger a change event
236 $('.wpuf-form').trigger('step-change-fieldset', [ step_number, current_step ]);
237 },
238
239 ajaxCategory: function () {
240
241 var el = '.cat-ajax',
242 wrap = '.category-wrap';
243
244 $(wrap).on('change', el, function(){
245 currentLevel = parseInt( $(this).parent().attr('level') );
246 WP_User_Frontend.getChildCats( $(this), 'lvl', currentLevel+1, wrap, 'category');
247 });
248 },
249
250 getChildCats: function (dropdown, result_div, level, wrap_div, taxonomy) {
251
252 cat = $(dropdown).val();
253 results_div = result_div + level;
254 taxonomy = typeof taxonomy !== 'undefined' ? taxonomy : 'category';
255 field_attr = $(dropdown).siblings('span').data('taxonomy');
256
257 $.ajax({
258 type: 'post',
259 url: wpuf_frontend.ajaxurl,
260 data: {
261 action: 'wpuf_get_child_cat',
262 catID: cat,
263 nonce: wpuf_frontend.nonce,
264 field_attr: field_attr
265 },
266 beforeSend: function() {
267 $(dropdown).parent().parent().next('.loading').addClass('wpuf-loading');
268 },
269 complete: function() {
270 $(dropdown).parent().parent().next('.loading').removeClass('wpuf-loading');
271 },
272 success: function(html) {
273 //console.log( html ); return;
274 $(dropdown).parent().nextAll().each(function(){
275 $(this).remove();
276 });
277
278 if(html != "") {
279 $(dropdown).parent().addClass('hasChild').parent().append('<div id="'+result_div+level+'" level="'+level+'"></div>');
280 dropdown.parent().parent().find('#'+results_div).html(html).slideDown('fast');
281 }
282 }
283 });
284 },
285
286 cloneField: function(e) {
287 e.preventDefault();
288
289 var $div = $(this).closest('tr');
290 var $clone = $div.clone();
291 // console.log($clone);
292
293 //clear the inputs
294 $clone.find('input').val('');
295 $clone.find(':checked').attr('checked', '');
296 $div.after($clone);
297 },
298
299 removeField: function() {
300 //check if it's the only item
301 var $parent = $(this).closest('tr');
302 var items = $parent.siblings().andSelf().length;
303
304 if( items > 1 ) {
305 $parent.remove();
306 }
307 },
308
309 adminPostSubmit: function(e) {
310 e.preventDefault();
311
312 var form = $(this),
313 form_data = WP_User_Frontend.validateForm(form);
314
315 if (form_data) {
316 return true;
317 }
318 },
319
320 draftPost: function (e) {
321 e.preventDefault();
322
323 var self = $(this),
324 form = $(this).closest('form'),
325 form_data = form.weSerialize() + '&action=wpuf_draft_post',
326 post_id = form.find('input[type="hidden"][name="post_id"]').val();
327
328 var rich_texts = [],
329 val;
330
331 // grab rich texts from tinyMCE
332 $('.wpuf-rich-validation').each(function (index, item) {
333 var item = $(item);
334 var editor_id = item.data('id');
335 var item_name = item.data('name');
336 var val = $.trim( tinyMCE.get(editor_id).getContent() );
337
338 rich_texts.push(item_name + '=' + encodeURIComponent( val ) );
339 });
340
341 // append them to the form var
342 form_data = form_data + '&' + rich_texts.join('&');
343
344
345 self.after(' <span class="wpuf-loading"></span>');
346 $.post(wpuf_frontend.ajaxurl, form_data, function(res) {
347 // console.log(res, post_id);
348 if ( typeof post_id === 'undefined') {
349 var html = '<input type="hidden" name="post_id" value="' + res.post_id +'">';
350 html += '<input type="hidden" name="post_date" value="' + res.date +'">';
351 html += '<input type="hidden" name="post_author" value="' + res.post_author +'">';
352 html += '<input type="hidden" name="comment_status" value="' + res.comment_status +'">';
353
354 form.append( html );
355 }
356
357 self.next('span.wpuf-loading').remove();
358
359 self.after('<span class="wpuf-draft-saved">&nbsp; Post Saved</span>');
360 $('.wpuf-draft-saved').delay(2500).fadeOut('fast', function(){
361 $(this).remove();
362 });
363 })
364 },
365
366 // Frontend account dashboard update profile
367 account_update_profile: function (e) {
368 e.preventDefault();
369 var form = $(this).closest('form');
370
371 $.post(wpuf_frontend.ajaxurl, form.weSerialize(), function (res) {
372 if (res.success) {
373 form.find('.wpuf-error').hide();
374 form.find('.wpuf-success').show();
375 } else {
376 form.find('.wpuf-success').hide();
377 form.find('.wpuf-error').show();
378 form.find('.wpuf-error').text(res.data);
379 }
380 });
381 },
382
383 formStepCheck : function(e,fieldset) {
384 var form = fieldset,
385 submitButton = form.find('input[type=submit]');
386 form_data = WP_User_Frontend.validateForm(form);
387
388 if ( form_data == false ) {
389 WP_User_Frontend.addErrorNotice( self, 'bottom' );
390 }
391 return form_data;
392 },
393
394 formSubmit: function(e) {
395 e.preventDefault();
396
397 var form = $(this),
398 submitButton = form.find('input[type=submit]')
399 form_data = WP_User_Frontend.validateForm(form);
400
401 if (form_data) {
402
403 // send the request
404 form.find('li.wpuf-submit').append('<span class="wpuf-loading"></span>');
405 submitButton.attr('disabled', 'disabled').addClass('button-primary-disabled');
406
407 $.post(wpuf_frontend.ajaxurl, form_data, function(res) {
408 // var res = $.parseJSON(res);
409
410 if ( res.success) {
411
412 // enable external plugins to use events
413 $('body').trigger('wpuf:postform:success', res);
414
415 if ( res.show_message == true) {
416 form.before( '<div class="wpuf-success">' + res.message + '</div>');
417 form.slideUp( 'fast', function() {
418 form.remove();
419 });
420
421 //focus
422 $('html, body').animate({
423 scrollTop: $('.wpuf-success').offset().top - 100
424 }, 'fast');
425
426 } else {
427 window.location = res.redirect_to;
428 }
429
430 } else {
431
432 if ( typeof res.type !== 'undefined' && res.type === 'login' ) {
433
434 if ( confirm(res.error) ) {
435 window.location = res.redirect_to;
436 } else {
437 submitButton.removeAttr('disabled');
438 submitButton.removeClass('button-primary-disabled');
439 form.find('span.wpuf-loading').remove();
440 }
441
442 return;
443 } else {
444 if ( form.find('.g-recaptcha').length > 0 ) {
445 grecaptcha.reset();
446 }
447
448 swal({
449 html: res.error,
450 type: 'warning',
451 showCancelButton: false,
452 confirmButtonColor: '#d54e21',
453 confirmButtonText: 'OK',
454 cancelButtonClass: 'btn btn-danger',
455 });
456
457 }
458
459 submitButton.removeAttr('disabled');
460 }
461
462 submitButton.removeClass('button-primary-disabled');
463 form.find('span.wpuf-loading').remove();
464 });
465 }
466 },
467
468 validateForm: function( self ) {
469
470 var temp,
471 temp_val = '',
472 error = false,
473 error_items = [];
474 error_type = '';
475
476 // remove all initial errors if any
477 WP_User_Frontend.removeErrors(self);
478 WP_User_Frontend.removeErrorNotice(self);
479
480 // ===== Validate: Text and Textarea ========
481 var required = self.find('[data-required="yes"]:visible');
482
483 required.each(function(i, item) {
484 // temp_val = $.trim($(item).val());
485
486 // console.log( $(item).data('type') );
487 var data_type = $(item).data('type')
488 val = '';
489
490 switch(data_type) {
491 case 'rich':
492 var name = $(item).data('id')
493 val = $.trim( tinyMCE.get(name).getContent() );
494
495 if ( val === '') {
496 error = true;
497
498 // make it warn collor
499 WP_User_Frontend.markError(item);
500 }
501 break;
502
503 case 'textarea':
504 case 'text':
505
506 val = $.trim( $(item).val() );
507
508 if ( val === '') {
509 error = true;
510 error_type = 'required';
511
512 // make it warn collor
513 WP_User_Frontend.markError( item, error_type );
514 }
515 break;
516
517 case 'password':
518 case 'confirm_password':
519 var hasRepeat = $(item).data('repeat');
520
521 val = $.trim( $(item).val() );
522
523 if ( val === '') {
524 error = true;
525 error_type = 'required';
526
527 // make it warn collor
528 WP_User_Frontend.markError( item, error_type );
529 }
530
531 if ( hasRepeat ) {
532 var repeatItem = $('[data-type="confirm_password"]').eq(0);;
533
534 if ( repeatItem.val() != val ) {
535 error = true;
536 error_type = 'mismatch';
537
538 WP_User_Frontend.markError( repeatItem, error_type );
539 }
540 }
541
542 break;
543
544 case 'select':
545 val = $(item).val();
546
547 // console.log(val);
548 if ( !val || val === '-1' ) {
549 error = true;
550 error_type = 'required';
551
552 // make it warn collor
553 WP_User_Frontend.markError( item, error_type );
554 }
555 break;
556
557 case 'multiselect':
558 val = $(item).val();
559
560 if ( val === null || val.length === 0 ) {
561 error = true;
562 error_type = 'required';
563
564 // make it warn collor
565 WP_User_Frontend.markError( item, error_type );
566 }
567 break;
568
569 case 'tax-checkbox':
570 var length = $(item).children().find('input:checked').length;
571
572 if ( !length ) {
573 error = true;
574 error_type = 'required';
575
576 // make it warn collor
577 WP_User_Frontend.markError( item, error_type );
578 }
579 break;
580
581 case 'radio':
582 var length = $(item).find('input:checked').length;
583
584 if ( !length ) {
585 error = true;
586 error_type = 'required';
587
588 // make it warn collor
589 WP_User_Frontend.markError( item, error_type );
590 }
591 break;
592
593 case 'file':
594 var length = $(item).find('ul').children().length;
595
596 if ( !length ) {
597 error = true;
598 error_type = 'required';
599
600 // make it warn collor
601 WP_User_Frontend.markError( item, error_type );
602 }
603 break;
604
605 case 'email':
606 var val = $(item).val();
607
608 if ( val !== '' ) {
609 //run the validation
610 if( !WP_User_Frontend.isValidEmail( val ) ) {
611 error = true;
612 error_type = 'validation';
613
614 WP_User_Frontend.markError( item, error_type );
615 }
616 } else if( val === '' ) {
617 error = true;
618 error_type = 'required';
619
620 WP_User_Frontend.markError( item, error_type );
621 }
622 break;
623
624
625 case 'url':
626 var val = $(item).val();
627
628 if ( val !== '' ) {
629 //run the validation
630 if( !WP_User_Frontend.isValidURL( val ) ) {
631 error = true;
632 error_type = 'validation';
633
634 WP_User_Frontend.markError( item, error_type );
635 }
636 }
637 break;
638
639 };
640
641 });
642
643 //check Google Map is required
644 var map_required = self.find('[data-required="yes"][name="google_map"]');
645 if ( map_required ) {
646 var val = $(map_required).val();
647 if ( val == ',' ) {
648 error = true;
649 error_type = 'required';
650
651 WP_User_Frontend.markError( map_required, error_type );
652 }
653 }
654
655 // if already some error found, bail out
656 if (error) {
657 // add error notice
658 WP_User_Frontend.addErrorNotice(self,'end');
659
660 return false;
661 }
662
663 var form_data = self.weSerialize(),
664 rich_texts = [];
665
666 // grab rich texts from tinyMCE
667 $('.wpuf-rich-validation', self).each(function (index, item) {
668 var item = $(item);
669 var editor_id = item.data('id');
670 var item_name = item.data('name');
671 var val = $.trim( tinyMCE.get(editor_id).getContent() );
672
673 rich_texts.push(item_name + '=' + encodeURIComponent( val ) );
674 });
675
676 // append them to the form var
677 form_data = form_data + '&' + rich_texts.join('&');
678 return form_data;
679 },
680
681 /**
682 *
683 * @param form
684 * @param position (value = bottom or end) end if form is onepare, bottom, if form is multistep
685 */
686 addErrorNotice: function( form, position ) {
687 if( position == 'bottom' ) {
688 $('.wpuf-multistep-fieldset:visible').append('<div class="wpuf-errors">' + wpuf_frontend.error_message + '</div>');
689 } else {
690 $(form).find('li.wpuf-submit').append('<div class="wpuf-errors">' + wpuf_frontend.error_message + '</div>');
691 }
692
693 },
694
695 removeErrorNotice: function(form) {
696 $(form).find('.wpuf-errors').remove();
697 },
698
699 markError: function(item, error_type) {
700
701 var error_string = '';
702 $(item).closest('li').addClass('has-error');
703
704 if ( error_type ) {
705 error_string = $(item).closest('li').data('label');
706 switch ( error_type ) {
707 case 'required' :
708 error_string = error_string + ' ' + error_str_obj[error_type];
709 break;
710 case 'mismatch' :
711 error_string = error_string + ' ' +error_str_obj[error_type];
712 break;
713 case 'validation' :
714 error_string = error_string + ' ' + error_str_obj[error_type];
715 break
716 }
717 $(item).siblings('.wpuf-error-msg').remove();
718 $(item).after('<div class="wpuf-error-msg">'+ error_string +'</div>')
719 }
720
721 $(item).focus();
722 },
723
724 removeErrors: function(item) {
725 $(item).find('.has-error').removeClass('has-error');
726 $('.wpuf-error-msg').remove();
727 },
728
729 isValidEmail: function( email ) {
730 var pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);
731 return pattern.test(email);
732 },
733
734 isValidURL: function(url) {
735 var urlregex = new RegExp("^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.|http:\/\/|https:\/\/){1}([0-9A-Za-z]+\.)");
736 return urlregex.test(url);
737 },
738
739 insertImage: function(button, form_id) {
740
741 var container = 'wpuf-insert-image-container';
742
743 if ( ! $( '#' + button ).length ) {
744 return;
745 };
746
747 var imageUploader = new plupload.Uploader({
748 runtimes: 'html5,html4',
749 browse_button: button,
750 container: container,
751 multipart: true,
752 multipart_params: {
753 action: 'wpuf_insert_image',
754 form_id: $( '#' + button ).data('form_id')
755 },
756 multiple_queues: false,
757 multi_selection: false,
758 urlstream_upload: true,
759 file_data_name: 'wpuf_file',
760 max_file_size: '2mb',
761 url: wpuf_frontend_upload.plupload.url,
762 flash_swf_url: wpuf_frontend_upload.flash_swf_url,
763 filters: [{
764 title: 'Allowed Files',
765 extensions: 'jpg,jpeg,gif,png,bmp'
766 }]
767 });
768
769 imageUploader.bind('Init', function(up, params) {
770 // console.log("Current runtime environment: " + params.runtime);
771 });
772
773 imageUploader.bind('FilesAdded', function(up, files) {
774 var $container = $('#' + container);
775
776 $.each(files, function(i, file) {
777 $container.append(
778 '<div class="upload-item" id="' + file.id + '"><div class="progress progress-striped active"><div class="bar"></div></div></div>');
779 });
780
781 up.refresh();
782 up.start();
783 });
784
785 imageUploader.bind('QueueChanged', function (uploader) {
786 imageUploader.start();
787 });
788
789 imageUploader.bind('UploadProgress', function(up, file) {
790 var item = $('#' + file.id);
791
792 $('.bar', item).css({ width: file.percent + '%' });
793 $('.percent', item).html( file.percent + '%' );
794 });
795
796 imageUploader.bind('Error', function(up, error) {
797 alert('Error #' + error.code + ': ' + error.message);
798 });
799
800 imageUploader.bind('FileUploaded', function(up, file, response) {
801
802 $('#' + file.id).remove();
803
804 if ( response.response !== 'error' ) {
805 var success = false;
806
807 if ( typeof tinyMCE !== 'undefined' ) {
808
809 if ( typeof tinyMCE.execInstanceCommand !== 'function' ) {
810 // tinyMCE 4.x
811 var mce = tinyMCE.get( 'post_content_' + form_id );
812
813 if ( mce !== null ) {
814 mce.insertContent(response.response);
815 }
816 } else {
817 // tinyMCE 3.x
818 tinyMCE.execInstanceCommand( 'post_content_' + form_id, 'mceInsertContent', false, response.response);
819 }
820 }
821
822 // insert failed to the edit, perhaps insert into textarea
823 var post_content = $('#post_content_' + form_id);
824 post_content.val( post_content.val() + response.response );
825
826 } else {
827 alert('Something went wrong');
828 }
829 });
830
831 imageUploader.init();
832 },
833
834 deleteAvatar: function(e) {
835 e.preventDefault();
836
837 if ( confirm( $(this).data('confirm') ) ) {
838 $.post(wpuf_frontend.ajaxurl, {action: 'wpuf_delete_avatar', _wpnonce: wpuf_frontend.nonce}, function() {
839 $(e.target).parent().remove();
840 $('[id^=wpuf-avatar]').css("display", "");
841 });
842 }
843 },
844
845 editorLimit: {
846
847 bind: function(limit, field, type) {
848 if ( type === 'no' ) {
849 // it's a textarea
850 $('textarea#' + field).keydown( function(event) {
851 WP_User_Frontend.editorLimit.textLimit.call(this, event, limit);
852 });
853
854 $('input#' + field).keydown( function(event) {
855 WP_User_Frontend.editorLimit.textLimit.call(this, event, limit);
856 });
857
858 $('textarea#' + field).on('paste', function(event) {
859 var self = $(this);
860
861 setTimeout(function() {
862 WP_User_Frontend.editorLimit.textLimit.call(self, event, limit);
863 }, 100);
864 });
865
866 $('input#' + field).on('paste', function(event) {
867 var self = $(this);
868
869 setTimeout(function() {
870 WP_User_Frontend.editorLimit.textLimit.call(self, event, limit);
871 }, 100);
872 });
873
874 } else {
875 // it's a rich textarea
876 setTimeout(function () {
877 tinyMCE.get(field).onKeyDown.add(function(ed, event) {
878 WP_User_Frontend.editorLimit.tinymce.onKeyDown(ed, event, limit);
879 } );
880
881 tinyMCE.get(field).onPaste.add(function(ed, event) {
882 setTimeout(function() {
883 WP_User_Frontend.editorLimit.tinymce.onPaste(ed, event, limit);
884 }, 100);
885 });
886
887 }, 1000);
888 }
889 },
890
891 tinymce: {
892
893 getStats: function(ed) {
894 var body = ed.getBody(), text = tinymce.trim(body.innerText || body.textContent);
895
896 return {
897 chars: text.length,
898 words: text.split(/[\w\u2019\'-]+/).length
899 };
900 },
901
902 onKeyDown: function(ed, event, limit) {
903 var numWords = WP_User_Frontend.editorLimit.tinymce.getStats(ed).words - 1;
904
905 limit ? $('.mce-path-item.mce-last', ed.container).html('Word Limit : '+ numWords +'/'+limit):'';
906
907 if ( limit && numWords > limit ) {
908 WP_User_Frontend.editorLimit.blockTyping(event);
909 jQuery('.mce-path-item.mce-last', ed.container).html( wpuf_frontend.word_limit );
910 }
911 },
912
913 onPaste: function(ed, event, limit) {
914 var editorContent = ed.getContent().split(' ').slice(0, limit).join(' ');
915
916 // Let TinyMCE do the heavy lifting for inserting that content into the editor.
917 // ed.insertContent(content); //ed.execCommand('mceInsertContent', false, content);
918 ed.setContent(editorContent);
919
920 WP_User_Frontend.editorLimit.make_media_embed_code(editorContent, ed);
921 }
922 },
923
924 textLimit: function(event, limit) {
925 var self = $(this),
926 content = self.val().split(' ');
927
928 if ( limit && content.length > limit ) {
929 self.closest('.wpuf-fields').find('span.wpuf-wordlimit-message').html( wpuf_frontend.word_limit );
930 WP_User_Frontend.editorLimit.blockTyping(event);
931 } else {
932 self.closest('.wpuf-fields').find('span.wpuf-wordlimit-message').html('');
933 }
934
935 // handle the paste event
936 if ( event.type === 'paste' ) {
937 self.val( content.slice(0, limit).join( ' ' ) );
938 }
939 },
940
941 blockTyping: function(event) {
942 // Allow: backspace, delete, tab, escape, minus enter and . backspace = 8,delete=46,tab=9,enter=13,.=190,escape=27, minus = 189
943 if ($.inArray(event.keyCode, [46, 8, 9, 27, 13, 110, 190, 189]) !== -1 ||
944 // Allow: Ctrl+A
945 (event.keyCode == 65 && event.ctrlKey === true) ||
946 // Allow: home, end, left, right, down, up
947 (event.keyCode >= 35 && event.keyCode <= 40)) {
948 // let it happen, don't do anything
949 return;
950 }
951
952 event.preventDefault();
953 event.stopPropagation();
954 },
955
956 make_media_embed_code: function(content, editor){
957 $.post( ajaxurl, {
958 action:'make_media_embed_code',
959 content: content
960 },
961 function(data){
962 // console.log(data);
963 editor.setContent(editor.getContent() + editor.setContent(data));
964 }
965 )
966 }
967 }
968 };
969
970 $(function() {
971 WP_User_Frontend.init();
972
973 // payment gateway selection
974 $('ul.wpuf-payment-gateways').on('click', 'input[type=radio]', function(e) {
975 $('.wpuf-payment-instruction').slideUp(250);
976
977 $(this).parents('li').find('.wpuf-payment-instruction').slideDown(250);
978 });
979
980 if( !$('ul.wpuf-payment-gateways li').find('input[type=radio]').is(':checked') ) {
981 $('ul.wpuf-payment-gateways li').first().find('input[type=radio]').click()
982 } else {
983 var el = $('ul.wpuf-payment-gateways li').find('input[type=radio]:checked');
984 el.parents('li').find('.wpuf-payment-instruction').slideDown(250);
985 }
986 });
987
988 $(function() {
989 $('input[name="first_name"], input[name="last_name"]').on('change keyup', function() {
990 var myVal, newVal = $.makeArray($('input[name="first_name"], input[name="last_name"]').map(function(){
991 if (myVal = $(this).val()) {
992 return(myVal);
993 }
994 })).join(' ');
995 $('input[name="display_name"]').val(newVal);
996 });
997 });
998
999 // script for Dokan vendor registration template
1000 $(function($) {
1001
1002 $('.wpuf-form-add input[name="dokan_store_name"]').on('focusout', function() {
1003 var value = $(this).val().toLowerCase().replace(/-+/g, '').replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
1004 $('input[name="shopurl"]').val(value);
1005 $('#url-alart').text( value );
1006 $('input[name="shopurl"]').focus();
1007 });
1008
1009 $('.wpuf-form-add input[name="shopurl"]').keydown(function(e) {
1010 var text = $(this).val();
1011
1012 // Allow: backspace, delete, tab, escape, enter and .
1013 if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 91, 109, 110, 173, 189, 190]) !== -1 ||
1014 // Allow: Ctrl+A
1015 (e.keyCode == 65 && e.ctrlKey === true) ||
1016 // Allow: home, end, left, right
1017 (e.keyCode >= 35 && e.keyCode <= 39)) {
1018 // let it happen, don't do anything
1019 return;
1020 }
1021
1022 if ((e.shiftKey || (e.keyCode < 65 || e.keyCode > 90) && (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105) ) {
1023 e.preventDefault();
1024 }
1025 });
1026
1027 $('.wpuf-form-add input[name="shopurl"]').keyup(function(e) {
1028 $('#url-alart').text( $(this).val() );
1029 });
1030
1031 $('.wpuf-form-add input[name="shopurl"]').on('focusout', function() {
1032 var self = $(this),
1033 data = {
1034 action : 'shop_url',
1035 url_slug : self.val(),
1036 _nonce : dokan.nonce,
1037 };
1038
1039 if ( self.val() === '' ) {
1040 return;
1041 }
1042
1043 $.post( dokan.ajaxurl, data, function(resp) {
1044
1045 if ( resp == 0){
1046 $('#url-alart').removeClass('text-success').addClass('text-danger');
1047 $('#url-alart-mgs').removeClass('text-success').addClass('text-danger').text(dokan.seller.notAvailable);
1048 } else {
1049 $('#url-alart').removeClass('text-danger').addClass('text-success');
1050 $('#url-alart-mgs').removeClass('text-danger').addClass('text-success').text(dokan.seller.available);
1051 }
1052
1053 } );
1054
1055 });
1056
1057 // Set name attribute for google map search field
1058 $(".wpuf-form-add #wpuf-map-add-location").attr("name", "find_address");
1059 });
1060
1061 })(jQuery, window);
1062