1(function ($) { 2 "use strict"; 3 4 if (!$.wjbpExtensions) 5 $.wjbpExtensions = {}; 6 7 function WJBPMainCore() { 8 var self = this; 9 self.init(); 10 }; 11 12 WJBPMainCore.prototype = { 13 /** 14 * Initialize 15 */ 16 init: function() { 17 var self = this; 18 19 self.fileUpload(); 20 21 self.userLoginRegister(); 22 self.userLoginRegisterNew(); 23 24 self.userChangePass(); 25 26 self.removeJob(); 27 28 self.fillJob(); 29 30 self.applyEmail(); 31 32 self.recaptchaCallback(); 33 34 self.applyInternal(); 35 36 self.applicantsInit(); 37 38 self.applicationMeeting(); 39 40 self.addJobShortlist(); 41 42 self.removeJobShortlist(); 43 44 self.addCandidateShortlist(); 45 46 self.removeCandidateShortlist(); 47 48 self.reviewInit(); 49 50 self.jobAlert(); 51 52 self.candidateAlert(); 53 54 self.jobSocialApply(); 55 56 self.select2Init(); 57 58 self.jobSubmission(); 59 60 self.filterListing(); 61 62 self.followEmployer(); 63 64 self.employerAddEmployee(); 65 66 self.inviteCandidate(); 67 68 self.mixesFn(); 69 70 self.loadExtension(); 71 }, 72 loadExtension: function() { 73 var self = this; 74 75 // if ($.wjbpExtensions.ajax_upload) { 76 // $.wjbpExtensions.ajax_upload.call(self); 77 // } 78 }, 79 fileUpload: function(){ 80 81 var imagesPreview = function(input, placeToInsertImagePreview) { 82 if (input.files) { 83 var filesAmount = input.files.length; 84 var i; 85 for (i = 0; i < filesAmount; i++) { 86 var reader = new FileReader(); 87 reader.onload = function(event) { 88 $($.parseHTML('<img>')).attr('src', event.target.result).appendTo(placeToInsertImagePreview); 89 } 90 reader.readAsDataURL(input.files[i]); 91 } 92 } 93 }; 94 var filesPreview = function(input, placeToInsertImagePreview) { 95 if (input.files) { 96 var filesAmount = input.files.length; 97 var i; 98 for (i = 0; i < filesAmount; i++) { 99 var html = $($.parseHTML('<div><code>'+ input.files[i].name +'</code></div>')).appendTo(placeToInsertImagePreview); 100 } 101 } 102 }; 103 $('.cmb-type-wp-job-board-pro-file').each(function(e){ 104 var $e_this = $(this); 105 $(this).find('input[type="file"]:not(.wp-job-board-pro-file-upload)').on('change', function() { 106 $e_this.find('.wp-job-board-pro-uploaded-files').html(''); 107 108 // Validate type 109 var allowed_types = $(this).data('file_types'); 110 111 if ( allowed_types ) { 112 var acceptFileTypes = new RegExp( '(\.|\/)(' + allowed_types + ')$', 'i' ); 113 if ( this.files[0].name.length && ! acceptFileTypes.test( this.files[0].name ) ) { 114 alert(wp_job_board_pro_opts.not_allow); 115 $(this).val(null); 116 return false; 117 } 118 } 119 120 var file = this.files[0]; 121 var fileType = file["type"]; 122 var validImageTypes = ["image/gif", "image/jpeg", "image/png"]; 123 if ($.inArray(fileType, validImageTypes) < 0) { 124 filesPreview(this, $e_this.find('.wp-job-board-pro-uploaded-files')); 125 $e_this.find('.wp-job-board-pro-uploaded-files').css("display","block"); 126 } else { 127 imagesPreview(this, $e_this.find('.wp-job-board-pro-uploaded-files')); 128 $e_this.find('.wp-job-board-pro-uploaded-files').css("display","block"); 129 } 130 }); 131 }); 132 133 $(document).on('change', '.upload-file-btn-wrapper input[type="file"]', function(){ 134 var $e_this = $(this).closest('.upload-file-btn-wrapper'); 135 var $text = $e_this.find('.upload-file-btn').data('text'); 136 // Validate type 137 var allowed_types = $(this).data('file_types'); 138 139 if( $(this).val() == '' ) { 140 $e_this.find('.upload-file-btn span.text').html($text); 141 $e_this.find('.label-can-drag').removeClass('has-file'); 142 return false; 143 } 144 if ( allowed_types ) { 145 var acceptFileTypes = new RegExp( '(\.|\/)(' + allowed_types + ')$', 'i' ); 146 if ( this.files[0].name.length && ! acceptFileTypes.test( this.files[0].name ) ) { 147 alert(wp_job_board_pro_opts.not_allow); 148 $(this).val(null); 149 $e_this.find('.upload-file-btn span.text').html($text); 150 $e_this.find('.label-can-drag').removeClass('has-file'); 151 return false; 152 } 153 } 154 155 if (this.files) { 156 var filesAmount = this.files.length; 157 var i; 158 $e_this.find('.upload-file-btn span.text').html(''); 159 for (i = 0; i < filesAmount; i++) { 160 var $file_html = $($.parseHTML('<span class="text-inner"><span>'+ this.files[i].name +'</span><span class="close">×</span></span>')); 161 $e_this.find('.upload-file-btn span.text').append($file_html); 162 } 163 $e_this.find('.label-can-drag').addClass('has-file'); 164 } 165 }); 166 167 $(document).on('click', '.upload-file-btn-wrapper .upload-file-btn span.close', function(e){
168 e.preventDefault(); 169 var $e_this = $(this).closest('.upload-file-btn-wrapper'); 170 var $file_input = $e_this.find('input[type="file"]'); 171 var $text = $e_this.find('.upload-file-btn').data('text'); 172 173 $file_input.val(null); 174 $e_this.find('.upload-file-btn span.text').html($text); 175 $e_this.find('.label-can-drag').removeClass('has-file'); 176 }); 177 178 var isAdvancedUpload = function() { 179 var div = document.createElement('div'); 180 return (('draggable' in div) || ('ondragstart' in div && 'ondrop' in div)) && 'FormData' in window && 'FileReader' in window; 181 }(); 182 183 if (isAdvancedUpload) { 184 185 var droppedFiles = false; 186 $('.label-can-drag').each(function(){ 187 var label_self = $(this); 188 label_self.on('drag dragstart dragend dragover dragenter dragleave drop', function(e) { 189 e.preventDefault(); 190 e.stopPropagation(); 191 }).on('dragover dragenter', function() { 192 label_self.addClass('is-dragover'); 193 }).on('dragleave dragend drop', function() { 194 label_self.removeClass('is-dragover'); 195 }).on('drop', function(e) { 196 droppedFiles = e.originalEvent.dataTransfer.files; 197 label_self.parent().find('input[type="file"]').prop('files', droppedFiles).trigger('change'); 198 }); 199 }); 200 } 201 $(document).on('click', '.label-can-drag:not(.has-file)', function(){ 202 $(this).parent().find('input[type="file"]').trigger('click'); 203 }); 204 }, 205 userLoginRegisterNew: function() { 206 var self = this; 207 208 $(document).on('submit', 'form._employer_register_fields, form._candidate_register_fields', function(){ 209 var $this = $(this); 210 211 if ( self.registerAjax ) { 212 self.registerAjax.abort(); 213 } 214 215 if ( $this.hasClass('loading') ) { 216 return false; 217 } 218 219 var form_id = $(this).attr('id'); 220 221 222 $this.find('.alert').remove(); 223 224 $this.addClass('loading'); 225 var form_data = new FormData( $('#' + form_id)[0] ); 226 227 self.registerAjax = $.ajax({ 228 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_registernew&action=wp_job_board_pro_ajax_registernew' ), 229 type:'POST', 230 dataType: 'json', 231 data: form_data, 232 processData: false, 233 contentType: false, 234 }).done(function(data) { 235 $this.removeClass('loading'); 236 if ( data.status ) { 237 $this.prepend( '<div class="alert alert-info">'+data.msg+'</div>' ); 238 if ( data.redirect ) { 239 setTimeout(function(){ 240 if ( data.role == 'wp_job_board_pro_employer' ) { 241 window.location.href = wp_job_board_pro_opts.after_register_page_url; 242 } else { 243 window.location.href = wp_job_board_pro_opts.after_register_page_candidate_url; 244 } 245 }, 500); 246 } 247 } else { 248 $this.prepend( '<div class="alert alert-warning">'+data.msg+'</div>' ); 249 if ( wp_job_board_pro_opts.recaptcha_enable ) { 250 var recaptchas = document.getElementsByClassName("ga-recaptcha"); 251 for(var i=0; i<recaptchas.length; i++) { 252 grecaptcha.reset(i); 253 } 254 } 255 } 256 257 self.registerAjax = false; 258 }); 259 260 return false; 261 }); 262 }, 263 userLoginRegister: function() { 264 var self = this; 265 266 // sign in proccess 267 $('body').on('submit', 'form.login-form', function(){ 268 var $this = $(this); 269 $('.alert', this).remove(); 270 $this.addClass('loading'); 271 $.ajax({
272 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_login' ), 273 type:'POST', 274 dataType: 'json', 275 data: $(this).serialize()+"&action=wp_job_board_pro_ajax_login" 276 }).done(function(data) { 277 $this.removeClass('loading'); 278 if ( data.status ) { 279 $this.prepend( '<div class="alert alert-info">' + data.msg + '</div>' ); 280 setTimeout(function(){ 281 if ( data.role == 'wp_job_board_pro_employer' ) { 282 window.location.href = wp_job_board_pro_opts.after_login_page_url; 283 } else { 284 window.location.href = wp_job_board_pro_opts.after_login_page_candidate_url; 285 } 286 287 }, 500); 288 } else { 289 $this.prepend( '<div class="alert alert-warning">' + data.msg + '</div>' ); 290 291 if ( wp_job_board_pro_opts.recaptcha_enable ) { 292 var recaptchas = document.getElementsByClassName("ga-recaptcha"); 293 for(var i=0; i<recaptchas.length; i++) { 294 grecaptcha.reset(i); 295 } 296 } 297 } 298 }); 299 return false; 300 } ); 301 $('body').on('click', '.back-link', function(e){ 302 e.preventDefault(); 303 var $con = $(this).closest('.login-form-wrapper'); 304 $con.find('.form-container').hide(); 305 $($(this).attr('href')).show(); 306 return false; 307 } ); 308 309 // lost password in proccess 310 $('body').on('submit', 'form.forgotpassword-form', function(){ 311 var $this= $(this); 312 $('.alert', this).remove(); 313 $this.addClass('loading'); 314 $.ajax({
315 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_forgotpass' ), 316 type:'POST', 317 dataType: 'json', 318 data: $(this).serialize()+"&action=wp_job_board_pro_ajax_forgotpass" 319 }).done(function(data) { 320 $this.removeClass('loading'); 321 if ( data.status ) { 322 $this.prepend( '<div class="alert alert-info">'+data.msg+'</div>' ); 323 setTimeout(function(){ 324 window.location.reload(true); 325 }, 500); 326 } else { 327 $this.prepend( '<div class="alert alert-warning">'+data.msg+'</div>' ); 328 329 if ( wp_job_board_pro_opts.recaptcha_enable ) { 330 var recaptchas = document.getElementsByClassName("ga-recaptcha"); 331 for(var i=0; i<recaptchas.length; i++) { 332 grecaptcha.reset(i); 333 } 334 } 335 } 336 }); 337 return false; 338 } ); 339 $('body').on('click', '#forgot-password-form-wrapper form .btn-cancel', function(e){ 340 e.preventDefault(); 341 $('#forgot-password-form-wrapper').hide(); 342 $('#login-form-wrapper').show(); 343 } ); 344 345 // register 346 $('body').on('submit', 'form.register-form', function(){ 347 var $this = $(this); 348 $('.alert', this).remove(); 349 $this.addClass('loading'); 350 $.ajax({
351 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_register' ), 352 type:'POST', 353 dataType: 'json', 354 data: $(this).serialize()+"&action=wp_job_board_pro_ajax_register" 355 }).done(function(data) { 356 $this.removeClass('loading'); 357 if ( data.status ) { 358 $this.prepend( '<div class="alert alert-info">'+data.msg+'</div>' ); 359 if ( data.redirect ) { 360 setTimeout(function(){ 361 if ( data.role == 'wp_job_board_pro_employer' ) { 362 window.location.href = wp_job_board_pro_opts.after_register_page_url; 363 } else { 364 window.location.href = wp_job_board_pro_opts.after_register_page_candidate_url; 365 } 366 }, 500); 367 } 368 } else { 369 $this.prepend( '<div class="alert alert-warning">'+data.msg+'</div>' ); 370 if ( wp_job_board_pro_opts.recaptcha_enable ) { 371 var recaptchas = document.getElementsByClassName("ga-recaptcha"); 372 for(var i=0; i<recaptchas.length; i++) { 373 grecaptcha.reset(i); 374 } 375 } 376 } 377 }); 378 return false; 379 } ); 380 381 if ( $('form.register-form').length > 0 ) { 382 $('.role-tabs input[type=radio]').on('change', function() { 383 var val = $(this).val(); 384 var container = $(this).closest('.register-form'); 385 if ( val == 'wp_job_board_pro_candidate' ) { 386 container.find('.wp_job_board_pro_candidate_show').show(); 387 container.find('.wp_job_board_pro_employer_show').hide(); 388 } else { 389 container.find('.wp_job_board_pro_candidate_show').hide(); 390 container.find('.wp_job_board_pro_employer_show').show(); 391 } 392 }); 393 var val = $('.role-tabs input[type=radio]:checked').val(); 394 var container = $('form.register-form').closest('.register-form'); 395 if ( val == 'wp_job_board_pro_candidate' ) { 396 container.find('.wp_job_board_pro_candidate_show').show(); 397 container.find('.wp_job_board_pro_employer_show').hide(); 398 } else { 399 container.find('.wp_job_board_pro_candidate_show').hide(); 400 container.find('.wp_job_board_pro_employer_show').show(); 401 } 402 } 403 404 // wp-job-board-pro-resend-approve-account-btn 405 $(document).on('click', '.wp-job-board-pro-resend-approve-account-btn', function(e) { 406 e.preventDefault(); 407 var $this = $(this), 408 $container = $(this).parent(); 409 $this.addClass('loading'); 410 $.ajax({
411 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_resend_approve_account' ), 412 type:'POST', 413 dataType: 'json', 414 data: { 415 action: 'wp_job_board_pro_ajax_resend_approve_account', 416 login: $this.data('login'), 417 } 418 }).done(function(data) { 419 $this.removeClass('loading'); 420 if ( data.status ) { 421 $container.html( data.msg ); 422 } else { 423 $container.html( data.msg ); 424 } 425 }); 426 }); 427 }, 428 userChangePass: function() { 429 var self = this; 430 $('body').on('submit', 'form.change-password-form', function(){ 431 var $this = $(this); 432 $('.alert', this).remove(); 433 $this.addClass('loading'); 434 $.ajax({
435 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_change_password' ), 436 type:'POST', 437 dataType: 'json', 438 data: $(this).serialize()+"&action=wp_job_board_pro_ajax_change_password" 439 }).done(function(data) { 440 $this.removeClass('loading'); 441 if ( data.status ) { 442 $this.prepend( '<div class="alert alert-info">' + data.msg + '</div>' ); 443 setTimeout(function(){ 444 window.location.href = wp_job_board_pro_opts.login_register_url; 445 }, 500); 446 } else { 447 $this.prepend( '<div class="alert alert-warning">' + data.msg + '</div>' ); 448 } 449 }); 450 return false; 451 } ); 452 }, 453 removeJob: function() { 454 var self = this; 455 $('.job-button-delete').on('click', function() { 456 var $this = $(this); 457 var r = confirm( wp_job_board_pro_opts.rm_item_txt ); 458 if ( r == true ) { 459 $this.addClass('loading'); 460 var job_id = $(this).data('job_id'); 461 var nonce = $(this).data('nonce'); 462 $.ajax({
463 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_remove_job' ), 464 type:'POST', 465 dataType: 'json', 466 data: { 467 'job_id': job_id, 468 'nonce': nonce, 469 'action': 'wp_job_board_pro_ajax_remove_job', 470 } 471 }).done(function(data) { 472 $this.removeClass('loading'); 473 if ( data.status ) { 474 $this.closest('tr').remove(); 475 } 476 $(document).trigger( "after_remove_my_job", [$this, data] ); 477 478 self.showMessage(data.msg, data.status); 479 }); 480 } 481 }); 482 }, 483 fillJob: function() { 484 var self = this; 485 $(document).on('click', '.btn-action-icon.mark_filled', function() { 486 var $this = $(this); 487 $this.addClass('loading'); 488 var job_id = $this.data('job_id'); 489 var nonce = $this.data('nonce'); 490 $.ajax({
491 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_mark_filled_job' ), 492 type:'POST', 493 dataType: 'json', 494 data: { 495 'job_id': job_id, 496 'nonce': nonce, 497 'action': 'wp_job_board_pro_ajax_mark_filled_job', 498 } 499 }).done(function(data) { 500 $this.removeClass('loading'); 501 if ( data.status ) { 502 $this.attr('title', data.title); 503 $this.data('nonce', data.nonce); 504 $this.removeClass('mark_filled').addClass('mark_not_filled'); 505 $this.find('i').attr('class', data.icon_class); 506 507 $this.closest('tr').find('.job-title-wrapper .application-status-label').remove(); 508 if ( data.label ) { 509 $this.closest('tr').find('.job-title-wrapper').append(data.label); 510 } 511 } 512 self.showMessage(data.msg, data.status); 513 }); 514 }); 515 $(document).on('click', '.btn-action-icon.mark_not_filled', function() { 516 var $this = $(this); 517 $this.addClass('loading'); 518 var job_id = $this.data('job_id'); 519 var nonce = $this.data('nonce'); 520 $.ajax({
521 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_mark_not_filled_job' ), 522 type:'POST', 523 dataType: 'json', 524 data: { 525 'job_id': job_id, 526 'nonce': nonce, 527 'action': 'wp_job_board_pro_ajax_mark_not_filled_job', 528 } 529 }).done(function(data) { 530 $this.removeClass('loading'); 531 if ( data.status ) { 532 $this.attr('title', data.title); 533 $this.data('nonce', data.nonce); 534 $this.removeClass('mark_not_filled').addClass('mark_filled'); 535 $this.find('i').attr('class', data.icon_class); 536 537 $this.closest('tr').find('.job-title-wrapper .application-status-label').remove(); 538 if ( data.label ) { 539 $this.closest('tr').find('.job-title-wrapper').append(data.label); 540 } 541 } 542 self.showMessage(data.msg, data.status); 543 }); 544 }); 545 }, 546 recaptchaCallback: function() { 547 if (window.grecaptcha) { 548 setTimeout(function(){ 549 var recaptchas = document.getElementsByClassName("ga-recaptcha"); 550 for(var i=0; i<recaptchas.length; i++) { 551 var recaptcha = recaptchas[i]; 552 var sitekey = recaptcha.dataset.sitekey; 553 554 grecaptcha.render(recaptcha, { 555 'sitekey' : sitekey 556 }); 557 } 558 }, 1000); 559 } 560 }, 561 applyEmail: function() { 562 var self = this; 563 564 $('.btn-apply-job-email:not(.filled), .btn-apply-job-call:not(.filled)').magnificPopup({ 565 mainClass: 'apus-mfp-zoom-in apus-mfp-zoom-call-in', 566 type:'inline', 567 midClick: true 568 }); 569 570 $('.btn-apply-job-email:not(.filled)').magnificPopup({ 571 mainClass: 'apus-mfp-zoom-in', 572 type:'inline', 573 midClick: true 574 }); 575 576 $(document).on( 'click', '.btn-apply-job-email.filled', function(e){ 577 e.preventDefault(); 578 self.showMessage(wp_job_board_pro_opts.job_filled, false); 579 }); 580 581 $(document).on('submit', 'form.job-apply-email-form', function(){ 582 var $this = $(this); 583 584 if ( self.applyEmailAjax ) { 585 self.applyEmailAjax.abort(); 586 } 587 588 if ( $this.hasClass('loading') ) { 589 return false; 590 } 591 592 var form_id = $(this).attr('id'); 593 var error = false; 594 595 if ( wp_job_board_pro_opts.cv_required == 'on' ) { 596 var cv_file = $this.find('input.cv_file'); 597 if (cv_file.length > 0 && cv_file.val() != '') { 598 cv_file = cv_file.prop('files')[0]; 599 var file_size = cv_file.size; 600 var file_type = cv_file.type; 601 602 var allowed_types = wp_job_board_pro_opts.cv_file_types; 603 var filesize_allow = wp_job_board_pro_opts.cv_file_size_allow; 604 filesize_allow = parseInt(filesize_allow); 605 606 if (file_size > filesize_allow) { 607 alert(wp_job_board_pro_opts.cv_file_size_error); 608 error = true; 609 } 610 if (allowed_types.indexOf(file_type) < 0) { 611 alert(wp_job_board_pro_opts.cv_file_types_error); 612 error = true; 613 } 614 } 615 } 616 617 if ( error == false ) { 618 $this.find('.alert').remove(); 619 620 $this.addClass('loading'); 621 var form_data = new FormData( $('#' + form_id)[0] ); 622 623 var action = $(this).find('input[name=action]').val(); 624 self.applyEmailAjax = $.ajax({
625 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', action ), 626 type:'POST', 627 dataType: 'json', 628 data: form_data, 629 processData: false, 630 contentType: false, 631 }).done(function(data) { 632 $this.removeClass('loading'); 633 634 if ( data.status ) { 635 $this.prepend( '<div class="alert alert-info">'+data.msg+'</div>' ); 636 } else { 637 $this.prepend( '<div class="alert alert-warning">'+data.msg+'</div>' ); 638 } 639 640 self.applyEmailAjax = false; 641 }); 642 } else { 643 alert(wp_job_board_pro_opts.choose_a_cv); 644 } 645 return false; 646 }); 647 }, 648 applyInternal: function() { 649 var self = this; 650 $(document).on('click', '.btn-apply-job-internal-required:not(.filled)', function() { 651 var msg = $(this).parent().find('.job-apply-internal-required-wrapper .msg-inner').html(); 652 self.showMessage(msg, false); 653 }); 654 $(document).on( 'click', '.btn-apply-job-internal:not(.filled), .btn-apply-job-internal-without-login:not(.filled)', function(e) { 655 e.preventDefault(); 656 var href = $(this).attr('href'); 657 $.magnificPopup.open({ 658 items: { 659 src: href, 660 }, 661 mainClass: 'apus-mfp-zoom-in', 662 type:'inline', 663 midClick: true 664 }); 665 }); 666 667 $(document).on( 'click', '.btn-apply-job-internal.filled, .btn-apply-job-internal-without-login.filled, .btn-apply-job-internal-required.filled', function(e){ 668 e.preventDefault(); 669 self.showMessage(wp_job_board_pro_opts.job_filled, false); 670 }); 671 672 $(document).on('submit', 'form.job-apply-internal-form', function(){ 673 var $this = $(this); 674 675 if ( self.applyInternalAjax ) { 676 self.applyInternalAjax.abort(); 677 } 678 679 if ( $this.hasClass('loading') ) { 680 return false; 681 } 682 var form_wrapper_id = $(this).closest('.job-apply-internal-form-wrapper').attr('id'); 683 var form_id = $(this).attr('id'); 684 685 686 var error = true; 687 if ( $this.find('input.apply_cv_id:checked').val() ) { 688 var error = false; 689 } 690 691 var cv_file = $this.find('input.cv_file'); 692 if (cv_file.length > 0 && cv_file.val() != '') { 693 var file_error = false; 694 cv_file = cv_file.prop('files')[0]; 695 var file_size = cv_file.size; 696 var file_type = cv_file.type; 697 698 var allowed_types = wp_job_board_pro_opts.cv_file_types; 699 var filesize_allow = wp_job_board_pro_opts.cv_file_size_allow; 700 filesize_allow = parseInt(filesize_allow); 701 702 if (file_size > filesize_allow) { 703 alert(wp_job_board_pro_opts.cv_file_size_error); 704 file_error = true; 705 } 706 if (allowed_types.indexOf(file_type) < 0) { 707 alert(wp_job_board_pro_opts.cv_file_types_error); 708 file_error = true; 709 } 710 711 if ( file_error == true ) { 712 return false; 713 } 714 error = false; 715 } 716 717 if ( wp_job_board_pro_opts.cv_required == 'on' ) { 718 719 } else { 720 var error = false; 721 } 722 723 if ( error == false ) { 724 $this.find('.alert').remove(); 725 726 $this.addClass('loading'); 727 var form_data = new FormData( $('#' + form_id)[0] ); 728 729 var action = $(this).find('input[name=action]').val(); 730 self.applyInternalAjax = $.ajax({
731 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', action ), 732 type:'POST', 733 dataType: 'json', 734 data: form_data, 735 processData: false, 736 contentType: false, 737 }).done(function(data) { 738 $this.removeClass('loading'); 739 740 if ( data.status ) { 741 $this.prepend( '<div class="alert alert-info">'+data.msg+'</div>' ); 742 if ( $('a[href="#'+form_wrapper_id+'"]').length ) { 743 $('a[href="#'+form_wrapper_id+'"]').html(data.text).removeClass('btn-apply-job-internal').addClass('btn-applied-job-internal'); 744 setTimeout(function(){ 745 $.magnificPopup.close(); 746 }, 2000); 747 } 748 } else { 749 $this.prepend( '<div class="alert alert-warning">'+data.msg+'</div>' ); 750 } 751 752 self.applyInternalAjax = false; 753 }); 754 } else { 755 alert(wp_job_board_pro_opts.choose_a_cv); 756 } 757 return false; 758 }); 759 760 $(document).on('submit', 'form#_candidate_register_fields_apply_apply', function(){ 761 var $this = $(this); 762 763 if ( self.registerAjax ) { 764 self.registerAjax.abort(); 765 } 766 767 if ( $this.hasClass('loading') ) { 768 return false; 769 } 770 771 var form_id = $(this).attr('id'); 772 773 774 $this.find('.alert').remove(); 775 776 $this.addClass('loading'); 777 var form_data = new FormData( $('#' + form_id)[0] ); 778 779 self.registerAjax = $.ajax({ 780 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_register_apply&action=wp_job_board_pro_ajax_register_apply' ), 781 type:'POST', 782 dataType: 'json', 783 data: form_data, 784 processData: false, 785 contentType: false, 786 }).done(function(data) { 787 $this.removeClass('loading'); 788 if ( data.status ) { 789 $this.prepend( '<div class="alert alert-info">'+data.msg+'</div>' ); 790 setTimeout(function(){ 791 location.reload(); 792 }, 500); 793 } else { 794 $this.prepend( '<div class="alert alert-warning">'+data.msg+'</div>' ); 795 if ( wp_job_board_pro_opts.recaptcha_enable ) { 796 var recaptchas = document.getElementsByClassName("ga-recaptcha"); 797 for(var i=0; i<recaptchas.length; i++) { 798 grecaptcha.reset(i); 799 } 800 } 801 } 802 803 self.registerAjax = false; 804 }); 805 806 return false; 807 }); 808 }, 809 applicantsInit: function() { 810 var self = this; 811 $(document).on('click', '.btn-remove-job-applied', function(e) { 812 e.preventDefault(); 813 var r = confirm( wp_job_board_pro_opts.rm_item_txt ); 814 if ( r == true ) { 815 var $this = $(this); 816 $this.addClass('loading'); 817 var applicant_id = $(this).data('applicant_id'); 818 var nonce = $(this).data('nonce'); 819 $.ajax({
820 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_remove_applied' ), 821 type:'POST', 822 dataType: 'json', 823 data: { 824 'applicant_id': applicant_id, 825 'nonce': nonce, 826 'action': 'wp_job_board_pro_ajax_remove_applied', 827 } 828 }).done(function(data) { 829 $this.removeClass('loading'); 830 if ( data.status ) { 831 $this.closest('.job-applied-wrapper').remove(); 832 $this.closest('.job-applicant-wrapper').remove(); 833 } 834 self.showMessage(data.msg, data.status); 835 }); 836 } 837 }); 838 839 // reject applicant 840 $(document).on('click', '.btn-reject-job-applied', function(e) { 841 e.preventDefault(); 842 var $this = $(this); 843 $this.addClass('loading'); 844 var applicant_id = $(this).data('applicant_id'); 845 var nonce = $(this).data('nonce'); 846 $.ajax({
847 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_reject_applied' ), 848 type:'POST', 849 dataType: 'json', 850 data: { 851 'applicant_id': applicant_id, 852 'nonce': nonce, 853 'action': 'wp_job_board_pro_ajax_reject_applied', 854 } 855 }).done(function(data) { 856 $this.removeClass('loading'); 857 if ( data.status ) { 858 var total_rej = parseInt($this.closest('.job-applicants').find('.rejected-applicants span').text()) + 1; 859 $this.closest('.job-applicants').find('.rejected-applicants span').text(total_rej); 860 861 if ( data.output ) { 862 $this.closest('.job-applicant-wrapper').replaceWith(data.output); 863 864 $('.btn-create-meeting-job-applied').magnificPopup({ 865 mainClass: 'apus-mfp-zoom-in', 866 type:'inline', 867 midClick: true, 868 closeBtnInside:false, 869 }); 870 } 871 } 872 self.showMessage(data.msg, data.status); 873 }); 874 }); 875 876 // undo reject applicant 877 $(document).on('click', '.btn-undo-reject-job-applied', function(e) { 878 e.preventDefault(); 879 var $this = $(this); 880 $this.addClass('loading'); 881 var applicant_id = $(this).data('applicant_id'); 882 var nonce = $(this).data('nonce'); 883 $.ajax({
884 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_undo_reject_applied' ), 885 type:'POST', 886 dataType: 'json', 887 data: { 888 'applicant_id': applicant_id, 889 'nonce': nonce, 890 'action': 'wp_job_board_pro_ajax_undo_reject_applied', 891 } 892 }).done(function(data) { 893 $this.removeClass('loading'); 894 if ( data.status ) { 895 var total_rej = parseInt($this.closest('.job-applicants').find('.rejected-applicants span').text()) - 1; 896 $this.closest('.job-applicants').find('.rejected-applicants span').text(total_rej); 897 898 if ( $this.closest('.job-applicants').find('.rejected-applicants').hasClass('active') ) { 899 900 $this.closest('.job-applied-wrapper').remove(); 901 $this.closest('.job-applicant-wrapper').remove(); 902 } else { 903 if ( data.output ) { 904 $this.closest('.job-applicant-wrapper').replaceWith(data.output); 905 906 $('.btn-create-meeting-job-applied').magnificPopup({ 907 mainClass: 'apus-mfp-zoom-in', 908 type:'inline', 909 midClick: true, 910 closeBtnInside:false, 911 }); 912 } 913 } 914 } 915 self.showMessage(data.msg, data.status); 916 }); 917 }); 918 919 // show reject applicants 920 $(document).on('click', '.show-rejected-applicants', function(e) { 921 e.preventDefault(); 922 var $this = $(this), 923 $con = $this.closest('.job-applicants'); 924 925 if ( $this.hasClass('active') || $this.hasClass('loading') ) { 926 return false; 927 } 928 929 $this.addClass('loading'); 930 var job_id = $(this).data('job_id'); 931 var nonce = $(this).data('nonce'); 932 $.ajax({
933 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_show_rejected_applicants' ), 934 type:'POST', 935 dataType: 'json', 936 data: { 937 'job_id': job_id, 938 'nonce': nonce, 939 'action': 'wp_job_board_pro_ajax_show_rejected_applicants' 940 } 941 }).done(function(data) { 942 $this.removeClass('loading'); 943 if ( data.status ) { 944 $con.find('.applicants-wrapper').html(data.output); 945 $con.find('.show-total-applicants').removeClass('active'); 946 $con.find('.show-approved-applicants').removeClass('active'); 947 $this.addClass('active'); 948 949 $('.btn-create-meeting-job-applied').magnificPopup({ 950 mainClass: 'apus-mfp-zoom-in', 951 type:'inline', 952 midClick: true, 953 closeBtnInside:false, 954 }); 955 } 956 self.showMessage(data.msg, data.status); 957 }); 958 }); 959 960 // approve applicant 961 $(document).on('click', '.btn-approve-job-applied', function(e) { 962 e.preventDefault(); 963 var $this = $(this); 964 $this.addClass('loading'); 965 var applicant_id = $(this).data('applicant_id'); 966 var nonce = $(this).data('nonce'); 967 $.ajax({
968 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_approve_applied' ), 969 type:'POST', 970 dataType: 'json', 971 data: { 972 'applicant_id': applicant_id, 973 'nonce': nonce, 974 'action': 'wp_job_board_pro_ajax_approve_applied', 975 } 976 }).done(function(data) { 977 $this.removeClass('loading'); 978 if ( data.status ) { 979 var total_app = parseInt($this.closest('.job-applicants').find('.approved-applicants span').text()) + 1; 980 $this.closest('.job-applicants').find('.approved-applicants span').text(total_app); 981 982 if ( data.output ) { 983 $this.closest('.job-applicant-wrapper').replaceWith(data.output); 984 985 $('.btn-create-meeting-job-applied').magnificPopup({ 986 mainClass: 'apus-mfp-zoom-in', 987 type:'inline', 988 midClick: true, 989 closeBtnInside:false, 990 }); 991 } 992 993 } 994 self.showMessage(data.msg, data.status); 995 }); 996 }); 997 998 // undo approved applicant 999 $(document).on('click', '.btn-undo-approve-job-applied', function(e) { 1000 e.preventDefault(); 1001 var $this = $(this); 1002 $this.addClass('loading'); 1003 var applicant_id = $(this).data('applicant_id'); 1004 var nonce = $(this).data('nonce'); 1005 $.ajax({
1006 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_undo_approve_applied' ), 1007 type:'POST', 1008 dataType: 'json', 1009 data: { 1010 'applicant_id': applicant_id, 1011 'nonce': nonce, 1012 'action': 'wp_job_board_pro_ajax_undo_approve_applied', 1013 } 1014 }).done(function(data) { 1015 $this.removeClass('loading'); 1016 if ( data.status ) { 1017 1018 var total_approve = parseInt($this.closest('.job-applicants').find('.approved-applicants span').text()) - 1; 1019 $this.closest('.job-applicants').find('.approved-applicants span').text(total_approve); 1020 1021 if ( $this.closest('.job-applicants').find('.approved-applicants').hasClass('active') ) { 1022 $this.closest('.job-applied-wrapper').remove(); 1023 $this.closest('.job-applicant-wrapper').remove(); 1024 } else { 1025 if ( data.output ) { 1026 $this.closest('.job-applicant-wrapper').replaceWith(data.output); 1027 1028 $('.btn-create-meeting-job-applied').magnificPopup({ 1029 mainClass: 'apus-mfp-zoom-in', 1030 type:'inline', 1031 midClick: true, 1032 closeBtnInside:false, 1033 }); 1034 } 1035 } 1036 } 1037 self.showMessage(data.msg, data.status); 1038 }); 1039 }); 1040 1041 // show approved applicants 1042 $(document).on('click', '.show-approved-applicants', function(e) { 1043 e.preventDefault(); 1044 var $this = $(this), 1045 $con = $this.closest('.job-applicants'); 1046 1047 if ( $this.hasClass('active') || $this.hasClass('loading') ) { 1048 return false; 1049 } 1050 1051 $this.addClass('loading'); 1052 var job_id = $(this).data('job_id'); 1053 var nonce = $(this).data('nonce'); 1054 $.ajax({
1055 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_show_approved_applicants' ), 1056 type:'POST', 1057 dataType: 'json', 1058 data: { 1059 'job_id': job_id, 1060 'nonce': nonce, 1061 'action': 'wp_job_board_pro_ajax_show_approved_applicants' 1062 } 1063 }).done(function(data) { 1064 $this.removeClass('loading'); 1065 if ( data.status ) { 1066 $con.find('.applicants-wrapper').html(data.output); 1067 $con.find('.show-total-applicants').removeClass('active'); 1068 $con.find('.show-rejected-applicants').removeClass('active'); 1069 $this.addClass('active'); 1070 1071 $('.btn-create-meeting-job-applied').magnificPopup({ 1072 mainClass: 'apus-mfp-zoom-in', 1073 type:'inline', 1074 midClick: true, 1075 closeBtnInside:false, 1076 }); 1077 } 1078 self.showMessage(data.msg, data.status); 1079 }); 1080 }); 1081 1082 // show applicants 1083 $(document).on('click', '.show-total-applicants', function(e) { 1084 e.preventDefault(); 1085 var $this = $(this), 1086 $con = $this.closest('.job-applicants'); 1087 1088 if ( $this.hasClass('active') || $this.hasClass('loading') ) { 1089 return false; 1090 } 1091 $this.addClass('loading'); 1092 var job_id = $(this).data('job_id'); 1093 var nonce = $(this).data('nonce'); 1094 $.ajax({
1095 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_show_applicants' ), 1096 type:'POST', 1097 dataType: 'json', 1098 data: { 1099 'job_id': job_id, 1100 'nonce': nonce, 1101 'action': 'wp_job_board_pro_ajax_show_applicants' 1102 } 1103 }).done(function(data) { 1104 $this.removeClass('loading'); 1105 if ( data.status ) { 1106 $con.find('.applicants-wrapper').html(data.output); 1107 $con.find('.show-rejected-applicants').removeClass('active'); 1108 $con.find('.show-approved-applicants').removeClass('active'); 1109 $this.addClass('active'); 1110 1111 $('.btn-create-meeting-job-applied').magnificPopup({ 1112 mainClass: 'apus-mfp-zoom-in', 1113 type:'inline', 1114 midClick: true, 1115 closeBtnInside:false, 1116 }); 1117 } 1118 self.showMessage(data.msg, data.status); 1119 }); 1120 }); 1121 1122 // pagination 1123 $(document).on('submit', 'form.applicants-pagination-form', function(e){ 1124 e.preventDefault(); 1125 var $this = $(this); 1126 var $container = $(this).closest('.applicants-wrapper'); 1127 if ( $this.hasClass('loading') ) { 1128 return false; 1129 } 1130 $this.addClass('loading'); 1131 $.ajax({
1132 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_applicants_pagination' ), 1133 type:'POST', 1134 dataType: 'json', 1135 data: $this.serialize() 1136 }).done(function(data) { 1137 $this.removeClass('loading'); 1138 if ( data.status ) { 1139 $container.find('.applicants-inner').append(data.output); 1140 if ( data.paged > 0 ) { 1141 $this.find('input[name=paged]').val(data.paged); 1142 } else { 1143 $this.remove(); 1144 } 1145 1146 $('.btn-create-meeting-job-applied').magnificPopup({ 1147 mainClass: 'apus-mfp-zoom-in', 1148 type:'inline', 1149 midClick: true, 1150 closeBtnInside:false, 1151 }); 1152 } else { 1153 self.showMessage(data.msg, data.status); 1154 } 1155 }); 1156 return false; 1157 }); 1158 1159 }, 1160 applicationMeeting: function() { 1161 if ( $('input.datetimepicker-date').length ) { 1162 $( "input.datetimepicker-date" ).each(function(){ 1163 $(this).datepicker({ 1164 dateFormat: $(this).data('date_format'), 1165 altField: $(this).data('id'), 1166 altFormat: 'yy-mm-dd' 1167 }); 1168 }); 1169 } 1170 1171 if ( $.isFunction( $.fn.select2 ) && typeof wp_job_board_pro_select2_opts !== 'undefined' ) { 1172 var select2_args = wp_job_board_pro_select2_opts; 1173 select2_args['allowClear'] = false; 1174 select2_args['minimumResultsForSearch'] = -1; 1175 select2_args['width'] = '100%'; 1176 if ( typeof wp_job_board_pro_select2_opts.language_result !== 'undefined' ) { 1177 select2_args['language'] = { 1178 noResults: function (params) { 1179 return wp_job_board_pro_select2_opts['language_result']; 1180 } 1181 } 1182 } 1183 $('select.select-time-hour').select2( select2_args ); 1184 } 1185 1186 1187 $('.btn-create-meeting-job-applied, .btn-messages-job-meeting, .btn-reschedule-job-meeting, .employer-meeting-zoom-settings').magnificPopup({ 1188 mainClass: 'apus-mfp-zoom-in', 1189 type:'inline', 1190 midClick: true, 1191 closeBtnInside:false, 1192 }); 1193 1194 $(document).on('click', '.close-popup', function(){ 1195 $.magnificPopup.close() 1196 }); 1197 1198 $(document).on('submit', 'form.create-meeting-form', function(e){ 1199 e.preventDefault(); 1200 var $this = $(this); 1201 1202 if ( self.createMeetingAjax ) { 1203 self.createMeetingAjax.abort(); 1204 } 1205 1206 if ( $this.hasClass('loading') ) { 1207 return false; 1208 } 1209 var form_id = $(this).attr('id'); 1210 1211 1212 $this.find('.alert').remove(); 1213 1214 $this.addClass('loading'); 1215 var form_data = new FormData( $('#' + form_id)[0] ); 1216 1217 var action = $(this).find('input[name=action]').val(); 1218 self.createMeetingAjax = $.ajax({ 1219 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', action ), 1220 type:'POST', 1221 dataType: 'json', 1222 data: form_data, 1223 processData: false, 1224 contentType: false, 1225 }).done(function(data) { 1226 $this.removeClass('loading'); 1227 1228 if ( data.status ) { 1229 $this.prepend( '<div class="alert alert-info">
1229'+data.msg+'</div>' ); 1230 1231 setTimeout(function(){ 1232 $.magnificPopup.close(); 1233 }, 2000); 1234 1235 } else { 1236 $this.prepend( '<div class="alert alert-warning">'+data.msg+'</div>' ); 1237 } 1238 1239 self.createMeetingAjax = false; 1240 }); 1241 1242 }); 1243 1244 $(document).on('submit', 'form.reschedule-meeting-form', function(e){ 1245 e.preventDefault(); 1246 var $this = $(this); 1247 1248 if ( self.rescheduleMeetingAjax ) { 1249 self.rescheduleMeetingAjax.abort(); 1250 } 1251 1252 if ( $this.hasClass('loading') ) { 1253 return false; 1254 } 1255 var form_id = $(this).attr('id'); 1256 1257 1258 $this.find('.alert').remove(); 1259 1260 $this.addClass('loading'); 1261 var form_data = new FormData( $('#' + form_id)[0] ); 1262 1263 var action = $(this).find('input[name=action]').val(); 1264 self.rescheduleMeetingAjax = $.ajax({ 1265 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', action ), 1266 type:'POST', 1267 dataType: 'json', 1268 data: form_data, 1269 processData: false, 1270 contentType: false, 1271 }).done(function(data) { 1272 $this.removeClass('loading'); 1273 1274 if ( data.status ) { 1275 $this.prepend( '<div class="alert alert-info">'+data.msg+'</div>' ); 1276 location.reload(); 1277 setTimeout(function(){ 1278 $.magnificPopup.close(); 1279 }, 2000); 1280 1281 } else { 1282 $this.prepend( '<div class="alert alert-warning">'+data.msg+'</div>' ); 1283 } 1284 1285 self.rescheduleMeetingAjax = false; 1286 }); 1287 1288 }); 1289 1290 $(document).on('click', '.btn-remove-job-meeting', function(e){ 1291 e.preventDefault(); 1292 var r = confirm( wp_job_board_pro_opts.rm_item_txt ); 1293 if ( r == true ) { 1294 var $this = $(this), 1295 $con = $this.closest('.meetings-list-inner'); 1296 1297 if ( $this.hasClass('loading') ) { 1298 return false; 1299 } 1300 $this.addClass('loading'); 1301 var meeting_id = $(this).data('meeting_id'); 1302 var nonce = $(this).data('nonce'); 1303 $.ajax({
1304 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_remove_meeting' ), 1305 type:'POST', 1306 dataType: 'json', 1307 data: { 1308 'meeting_id': meeting_id, 1309 'nonce': nonce 1310 } 1311 }).done(function(data) { 1312 $this.removeClass('loading'); 1313 if ( data.status ) { 1314 if ( $con.find('.meeting-wrapper').length > 1 ) { 1315 $this.closest('.meeting-wrapper').remove(); 1316 } else { 1317 location.reload(); 1318 } 1319 } 1320 self.showMessage(data.msg, data.status); 1321 }); 1322 } 1323 }); 1324 1325 $(document).on('click', '.btn-cancel-job-meeting', function(e){ 1326 e.preventDefault(); 1327 var r = confirm( wp_job_board_pro_opts.rm_item_txt ); 1328 if ( r == true ) { 1329 var $this = $(this), 1330 $con = $this.closest('.meetings-list-inner'); 1331 1332 if ( $this.hasClass('loading') ) { 1333 return false; 1334 } 1335 $this.addClass('loading'); 1336 var meeting_id = $(this).data('meeting_id'); 1337 var nonce = $(this).data('nonce'); 1338 $.ajax({
1339 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_cancel_meeting' ), 1340 type:'POST', 1341 dataType: 'json', 1342 data: { 1343 'meeting_id': meeting_id, 1344 'nonce': nonce 1345 } 1346 }).done(function(data) { 1347 $this.removeClass('loading'); 1348 if ( data.status ) { 1349 location.reload(); 1350 } 1351 self.showMessage(data.msg, data.status); 1352 }); 1353 } 1354 }); 1355 1356 // zoom settings 1357 $(document).on('submit', 'form.zoom-meeting-settings-form', function(e){ 1358 e.preventDefault(); 1359 1360 var $this = $(this); 1361 1362 if ( self.zoomSettingAjax ) { 1363 self.zoomSettingAjax.abort(); 1364 } 1365 1366 if ( $this.hasClass('loading') ) { 1367 return false; 1368 } 1369 var form_id = $(this).attr('id'); 1370 1371 1372 $this.find('.alert').remove(); 1373 1374 $this.addClass('loading'); 1375 var form_data = new FormData( $('#' + form_id)[0] ); 1376 1377 var action = $(this).find('input[name=action]').val(); 1378 self.zoomSettingAjax = $.ajax({ 1379 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', action ), 1380 type:'POST', 1381 dataType: 'json', 1382 data: form_data, 1383 processData: false, 1384 contentType: false, 1385 }).done(function(data) { 1386 $this.removeClass('loading'); 1387 1388 // if ( data.status ) { 1389 $this.prepend( '<div class="data">'+data.html+'</div>' ); 1390 1391 // setTimeout(function(){ 1392 // $.magnificPopup.close(); 1393 // }, 2000); 1394 1395 // } else { 1396 // $this.prepend( '<div class="alert alert-warning">'+data.html+'</div>' ); 1397 // } 1398 1399 self.zoomSettingAjax = false; 1400 }); 1401 }); 1402 }, 1403 addJobShortlist: function() { 1404 var self = this; 1405 $(document).on('click', '.btn-add-job-shortlist', function() { 1406 var $this = $(this); 1407 $this.addClass('loading'); 1408 var job_id = $(this).data('job_id'); 1409 var nonce = $(this).data('nonce'); 1410 $.ajax({
1411 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_add_job_shortlist' ), 1412 type:'POST', 1413 dataType: 'json', 1414 data: { 1415 'job_id': job_id, 1416 'nonce': nonce, 1417 'action': 'wp_job_board_pro_ajax_add_job_shortlist', 1418 } 1419 }).done(function(data) { 1420 $this.removeClass('loading'); 1421 if ( data.status ) { 1422 $this.replaceWith(data.html); 1423 $(document).trigger( "after_add_shortlist", [$this, data] ); 1424 } 1425 self.showMessage(data.msg, data.status); 1426 }); 1427 }); 1428 }, 1429 removeJobShortlist: function() { 1430 var self = this; 1431 $(document).on('click', '.btn-added-job-shortlist', function() { 1432 var $this = $(this); 1433 1434 $this.addClass('loading'); 1435 var job_id = $(this).data('job_id'); 1436 var nonce = $(this).data('nonce'); 1437 $.ajax({
1438 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_remove_job_shortlist' ), 1439 type:'POST', 1440 dataType: 'json', 1441 data: { 1442 'job_id': job_id, 1443 'nonce': nonce, 1444 'action': 'wp_job_board_pro_ajax_remove_job_shortlist', 1445 } 1446 }).done(function(data) { 1447 $this.removeClass('loading'); 1448 if ( data.status ) { 1449 $this.replaceWith(data.html); 1450 $(document).trigger( "after_remove_shortlist", [$this, data] ); 1451 } 1452 self.showMessage(data.msg, data.status); 1453 }); 1454 1455 }); 1456 1457 $('.btn-remove-job-shortlist').on('click', function() { 1458 var $this = $(this); 1459 var r = confirm( wp_job_board_pro_opts.rm_item_txt ); 1460 if ( r == true ) { 1461 $this.addClass('loading'); 1462 var job_id = $(this).data('job_id'); 1463 var nonce = $(this).data('nonce'); 1464 $.ajax({
1465 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_remove_job_shortlist' ), 1466 type:'POST', 1467 dataType: 'json', 1468 data: { 1469 'job_id': job_id, 1470 'nonce': nonce, 1471 'action': 'wp_job_board_pro_ajax_remove_job_shortlist', 1472 } 1473 }).done(function(data) { 1474 $this.removeClass('loading'); 1475 if ( data.status ) { 1476 $this.closest('.job-shortlist-wrapper').remove(); 1477 } 1478 self.showMessage(data.msg, data.status); 1479 }); 1480 } 1481 }); 1482 }, 1483 addCandidateShortlist: function() { 1484 var self = this; 1485 $(document).on('click', '.btn-add-candidate-shortlist', function() { 1486 var $this = $(this); 1487 $this.addClass('loading'); 1488 var candidate_id = $(this).data('candidate_id'); 1489 var nonce = $(this).data('nonce'); 1490 $.ajax({
1491 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_add_candidate_shortlist' ), 1492 type:'POST', 1493 dataType: 'json', 1494 data: { 1495 'candidate_id': candidate_id, 1496 'nonce': nonce, 1497 'action': 'wp_job_board_pro_ajax_add_candidate_shortlist', 1498 } 1499 }).done(function(data) { 1500 $this.removeClass('loading'); 1501 if ( data.status ) { 1502 $this.replaceWith(data.html); 1503 $(document).trigger( "after_add_candidate_shortlist", [$this, data] ); 1504 } 1505 self.showMessage(data.msg, data.status); 1506 }); 1507 }); 1508 }, 1509 removeCandidateShortlist: function() { 1510 var self = this; 1511 $(document).on('click', '.btn-added-candidate-shortlist', function() { 1512 var $this = $(this); 1513 $this.addClass('loading'); 1514 var candidate_id = $(this).data('candidate_id'); 1515 var nonce = $(this).data('nonce'); 1516 $.ajax({
1517 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_remove_candidate_shortlist' ), 1518 type:'POST', 1519 dataType: 'json', 1520 data: { 1521 'candidate_id': candidate_id, 1522 'nonce': nonce, 1523 'action': 'wp_job_board_pro_ajax_remove_candidate_shortlist', 1524 } 1525 }).done(function(data) { 1526 $this.removeClass('loading'); 1527 if ( data.status ) { 1528 $this.replaceWith(data.html); 1529 $(document).trigger( "after_remove_candidate_shortlist", [$this, data] ); 1530 } 1531 1532 self.showMessage(data.msg, data.status); 1533 }); 1534 }); 1535 1536 $(document).on('click', '.btn-remove-candidate-shortlist', function() { 1537 var $this = $(this); 1538 var r = confirm( wp_job_board_pro_opts.rm_item_txt ); 1539 if ( r == true ) { 1540 $this.addClass('loading'); 1541 var candidate_id = $(this).data('candidate_id'); 1542 var nonce = $(this).data('nonce'); 1543 $.ajax({
1544 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_remove_candidate_shortlist' ), 1545 type:'POST', 1546 dataType: 'json', 1547 data: { 1548 'candidate_id': candidate_id, 1549 'nonce': nonce, 1550 'action': 'wp_job_board_pro_ajax_remove_candidate_shortlist', 1551 } 1552 }).done(function(data) { 1553 $this.removeClass('loading'); 1554 if ( data.status ) { 1555 $this.closest('.candidate-shortlist-wrapper').remove(); 1556 } 1557 self.showMessage(data.msg, data.status); 1558 }); 1559 } 1560 }); 1561 }, 1562 followEmployer: function() { 1563 var self = this; 1564 $(document).on('click', '.btn-follow-employer', function() { 1565 var $this = $(this); 1566 $this.addClass('loading'); 1567 var employer_id = $(this).data('employer_id'); 1568 var nonce = $(this).data('nonce'); 1569 $.ajax({
1570 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_follow_employer' ), 1571 type:'POST', 1572 dataType: 'json', 1573 data: { 1574 'employer_id': employer_id, 1575 'nonce': nonce, 1576 'action': 'wp_job_board_pro_ajax_follow_employer', 1577 } 1578 }).done(function(data) { 1579 $this.removeClass('loading'); 1580 if ( data.status ) { 1581 $this.removeClass('btn-follow-employer').addClass('btn-unfollow-employer'); 1582 $this.data('nonce', data.nonce); 1583 $this.find('span').text(data.text); 1584 $(document).trigger( "after_follow_employer", [$this, data] ); 1585 } 1586 self.showMessage(data.msg, data.status); 1587 }); 1588 }); 1589 1590 // unfollow 1591 $(document).on('click', '.btn-unfollow-employer', function() { 1592 var $this = $(this); 1593 $this.addClass('loading'); 1594 var employer_id = $(this).data('employer_id'); 1595 var nonce = $(this).data('nonce'); 1596 $.ajax({
1597 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_unfollow_employer' ), 1598 type:'POST', 1599 dataType: 'json', 1600 data: { 1601 'employer_id': employer_id, 1602 'nonce': nonce, 1603 'action': 'wp_job_board_pro_ajax_unfollow_employer', 1604 } 1605 }).done(function(data) { 1606 $this.removeClass('loading'); 1607 if ( data.status ) { 1608 if ( $this.closest('.following-employer-wrapper').length > 0 ) { 1609 if ( $('.following-employer-wrapper').length <= 1 ) { 1610 location.reload(); 1611 } else { 1612 $this.closest('.following-employer-wrapper').remove(); 1613 } 1614 } else { 1615 $this.removeClass('btn-unfollow-employer').addClass('btn-follow-employer'); 1616 $this.data('nonce', data.nonce); 1617 $this.find('span').text(data.text); 1618 $(document).trigger( "after_unfollow_employer", [$this, data] ); 1619 } 1620 } 1621 self.showMessage(data.msg, data.status); 1622 }); 1623 }); 1624 }, 1625 reviewInit: function() { 1626 var self = this; 1627 if ( $('.comment-form-rating').length > 0 ) { 1628 var $star = $('.comment-form-rating .filled'); 1629 var $review = $('#_input_rating'); 1630 $star.find('li').on('mouseover', function () { 1631 $(this).nextAll().addClass('active'); 1632 $(this).prevAll().removeClass('active'); 1633 $(this).removeClass('active'); 1634 }); 1635 $star.on('mouseout', function(){ 1636 var current = $review.val() - 1; 1637 var current_e = $star.find('li').eq(current); 1638 1639 current_e.nextAll().addClass('active'); 1640 current_e.prevAll().removeClass('active'); 1641 current_e.removeClass('active'); 1642 }); 1643 $star.find('li').on('click', function () { 1644 $(this).nextAll().addClass('active'); 1645 $(this).prevAll().removeClass('active'); 1646 $(this).removeClass('active'); 1647 1648 $review.val($(this).index() + 1); 1649 } ); 1650 } 1651 }, 1652 jobAlert: function() { 1653 var self = this; 1654 $(document).on('click', '.btn-job-alert', function() { 1655 var form_html = $('.job-alert-form-wrapper').html(); 1656 $.magnificPopup.open({ 1657 mainClass: 'wp-job-board-pro-mfp-container', 1658 items : { 1659 src : form_html, 1660 type: 'inline' 1661 } 1662 }); 1663 }); 1664 $(document).on('submit', 'form.job-alert-form', function() { 1665 var $this = $(this); 1666 $this.addClass('loading'); 1667 $this.find('.alert').remove(); 1668 var url_vars = self.getUrlVars(); 1669 $.ajax({
1670 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_add_job_alert' ), 1671 type:'POST', 1672 dataType: 'json', 1673 data: $this.serialize() + '&action=wp_job_board_pro_ajax_add_job_alert' + url_vars 1674 }).done(function(data) { 1675 $this.removeClass('loading'); 1676 if ( data.status ) { 1677 $this.prepend( '<div class="alert alert-info">'+data.msg+'</div>' ); 1678 setTimeout(function(){ 1679 $.magnificPopup.close(); 1680 }, 1500); 1681 } else { 1682 $this.prepend( '<div class="alert alert-warning">'+data.msg+'</div>' ); 1683 } 1684 }); 1685 1686 return false; 1687 }); 1688 1689 // Remove job alert 1690 $(document).on('click', '.btn-remove-job-alert', function() { 1691 var $this = $(this); 1692 var r = confirm( wp_job_board_pro_opts.rm_item_txt ); 1693 if ( r == true ) { 1694 $this.addClass('loading'); 1695 var alert_id = $(this).data('alert_id'); 1696 var nonce = $(this).data('nonce'); 1697 $.ajax({
1698 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_remove_job_alert' ), 1699 type:'POST', 1700 dataType: 'json', 1701 data: { 1702 'alert_id': alert_id, 1703 'nonce': nonce, 1704 'action': 'wp_job_board_pro_ajax_remove_job_alert', 1705 } 1706 }).done(function(data) { 1707 $this.removeClass('loading'); 1708 if ( data.status ) { 1709 $this.closest('.job-alert-wrapper').remove(); 1710 } 1711 self.showMessage(data.msg, data.status); 1712 }); 1713 } 1714 }); 1715 }, 1716 candidateAlert: function() { 1717 var self = this; 1718 $(document).on('click', '.btn-candidate-alert', function() { 1719 var form_html = $('.candidate-alert-form-wrapper').html(); 1720 $.magnificPopup.open({ 1721 mainClass: 'wp-job-board-pro-mfp-container', 1722 items : { 1723 src : form_html, 1724 type: 'inline' 1725 } 1726 }); 1727 }); 1728 $(document).on('submit', 'form.candidate-alert-form', function() { 1729 var $this = $(this); 1730 $this.addClass('loading'); 1731 var url_vars = self.getUrlVars(); 1732 $.ajax({
1733 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_add_candidate_alert' ), 1734 type:'POST', 1735 dataType: 'json', 1736 data: $this.serialize() + '&action=wp_job_board_pro_ajax_add_candidate_alert' + url_vars 1737 }).done(function(data) { 1738 $this.removeClass('loading'); 1739 if ( data.status ) { 1740 $this.prepend( '<div class="alert alert-info">'+data.msg+'</div>' ); 1741 setTimeout(function(){ 1742 $.magnificPopup.close(); 1743 }, 1500); 1744 } else { 1745 $this.prepend( '<div class="alert alert-warning">'+data.msg+'</div>' ); 1746 } 1747 }); 1748 1749 return false; 1750 }); 1751 1752 // Remove candidate alert 1753 $(document).on('click', '.btn-remove-candidate-alert', function() { 1754 var $this = $(this); 1755 var r = confirm( wp_job_board_pro_opts.rm_item_txt ); 1756 if ( r == true ) { 1757 $this.addClass('loading'); 1758 var alert_id = $(this).data('alert_id'); 1759 var nonce = $(this).data('nonce'); 1760 $.ajax({
1761 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_remove_candidate_alert' ), 1762 type:'POST', 1763 dataType: 'json', 1764 data: { 1765 'alert_id': alert_id, 1766 'nonce': nonce, 1767 'action': 'wp_job_board_pro_ajax_remove_candidate_alert', 1768 } 1769 }).done(function(data) { 1770 $this.removeClass('loading'); 1771 if ( data.status ) { 1772 $this.closest('.candidate-alert-wrapper').remove(); 1773 } 1774 self.showMessage(data.msg, data.status); 1775 }); 1776 } 1777 }); 1778 }, 1779 getUrlVars: function() { 1780 var self = this; 1781 var vars = ''; 1782 var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); 1783 for(var i = 0; i < hashes.length; i++) { 1784 vars += '&' +hashes[i]; 1785 } 1786 return vars; 1787 }, 1788 jobSocialApply: function() { 1789 var self = this; 1790 $('.facebook-apply-btn').on('click', function(){ 1791 var job_id = $(this).data('job_id'); 1792 var facebook_login_url = $(this).attr('href'); 1793 self.setCookie('wp_job_board_pro_facebook_job_id', job_id, 1); 1794 window.location.href = facebook_login_url; 1795 }); 1796 1797 // google 1798 $('.google-apply-btn').on('click', function(){ 1799 var job_id = $(this).data('job_id'); 1800 var google_login_url = $(this).attr('href'); 1801 self.setCookie('wp_job_board_pro_google_job_id', job_id, 1); 1802 window.location.href = google_login_url; 1803 }); 1804 1805 // linkedin 1806 $('.linkedin-apply-btn').on('click', function(){ 1807 var job_id = $(this).data('job_id'); 1808 var linkedin_login_url = $(this).attr('href'); 1809 self.setCookie('wp_job_board_pro_linkedin_job_id', job_id, 1); 1810 window.location.href = linkedin_login_url; 1811 }); 1812 1813 // twitter 1814 $('.twitter-apply-btn').on('click', function(){ 1815 var job_id = $(this).data('job_id'); 1816 var twitter_login_url = $(this).attr('href'); 1817 self.setCookie('wp_job_board_pro_twitter_job_id', job_id, 1); 1818 window.location.href = twitter_login_url; 1819 }); 1820 }, 1821 select2Init: function() { 1822 var self = this; 1823 if ( $.isFunction( $.fn.select2 ) && typeof wp_job_board_pro_select2_opts !== 'undefined' ) { 1824 var select2_args = wp_job_board_pro_select2_opts; 1825 select2_args['allowClear'] = false; 1826 select2_args['minimumResultsForSearch'] = 10; 1827 select2_args['width'] = 'auto'; 1828 if ( typeof wp_job_board_pro_select2_opts.language_result !== 'undefined' ) { 1829 select2_args['language'] = { 1830 noResults: function (params) { 1831 return wp_job_board_pro_select2_opts['language_result']; 1832 } 1833 } 1834 } 1835 if( $('.woocommerce-ordering select.orderby').length ){ 1836 var woo_select2_args = select2_args; 1837 woo_select2_args.theme = 'default orderby'; 1838 $('.woocommerce-ordering select.orderby').select2( woo_select2_args ); 1839 } 1840 $('select.orderby').select2( select2_args ); 1841 $('select.job_id').select2( select2_args ); 1842 } 1843 }, 1844 jobSubmission: function() { 1845 var self = this; 1846 // select2 1847 if ( $.isFunction( $.fn.select2 ) && typeof wp_job_board_pro_select2_opts !== 'undefined' ) { 1848 var select2_args = wp_job_board_pro_select2_opts; 1849 select2_args['allowClear'] = false; 1850 if ( typeof wp_job_board_pro_select2_opts.language_result !== 'undefined' ) { 1851 select2_args['language'] = { 1852 noResults: function (params) { 1853 return select2_args['language_result']; 1854 } 1855 } 1856 } 1857 select2_args['minimumResultsForSearch'] = 10; 1858 1859 $( 'select.cmb2_select' ).select2( select2_args ); 1860 } 1861 1862 $('.cmb-repeatable-group').on('cmb2_add_group_row_start', function (event, instance) { 1863 var $table = $(document.getElementById($(instance).data('selector'))); 1864 var $oldRow = $table.find('.cmb-repeatable-grouping').last(); 1865 1866 $oldRow.find('select.cmb2_select').each(function () { 1867 $(this).select2('destroy'); 1868 }); 1869 }); 1870 1871 $('.cmb-repeatable-group').on('cmb2_add_row', function (event, newRow) { 1872 $(newRow).find('select.cmb2_select').each(function () { 1873 $('option:selected', this).removeAttr("selected"); 1874 $(this).select2(select2_args); 1875 }); 1876 1877 // Reinitialise the field we previously destroyed 1878 $(newRow).prev().find('select.cmb2_select').each(function () { 1879 $(this).select2(select2_args); 1880 }); 1881 }); 1882 1883 /// 1884 $('.cmb-add-row-button').on('click', function (event) { 1885 var $table = $(document.getElementById($(event.target).data('selector'))); 1886 var $oldRow = $table.find('.cmb-row').last(); 1887 1888 $oldRow.find('select.cmb2_select').each(function () { 1889 $(this).select2('destroy'); 1890 }); 1891 }); 1892 1893 $('.cmb-repeat-table').on('cmb2_add_row', function (event, newRow) { 1894 // Reinitialise the field we previously destroyed 1895 $(newRow).prev().find('select.cmb2_select').each(function () { 1896 $('option:selected', this).removeAttr("selected"); 1897 $(this).select2(select2_args); 1898 }); 1899 }); 1900 1901 // 1902 var apply_type = $('#_job_apply_type').val(); 1903 if ( apply_type == 'internal' ) { 1904 $('.cmb2-id--job-apply-url').hide(); 1905 $('.cmb2-id--job-apply-email').hide(); 1906 $('.cmb2-id--job-phone').hide(); 1907 } else if ( apply_type == 'external' ) { 1908 $('.cmb2-id--job-apply-url').show(); 1909 $('.cmb2-id--job-apply-email').hide(); 1910 $('.cmb2-id--job-phone').hide(); 1911 } else if ( apply_type == 'with_email' ) { 1912 $('.cmb2-id--job-apply-url').hide(); 1913 $('.cmb2-id--job-phone').hide(); 1914 $('.cmb2-id--job-apply-email').show(); 1915 } else if ( apply_type == 'call' ) { 1916 $('.cmb2-id--job-apply-url').hide(); 1917 $('.cmb2-id--job-apply-email').hide(); 1918 $('.cmb2-id--job-phone').show(); 1919 } 1920 $('#_job_apply_type').change(function(){ 1921 var apply_type = $('#_job_apply_type').val(); 1922 if ( apply_type == 'internal' ) { 1923 $('.cmb2-id--job-apply-url').hide(); 1924 $('.cmb2-id--job-apply-email').hide(); 1925 $('.cmb2-id--job-phone').hide(); 1926 } else if ( apply_type == 'external' ) { 1927 $('.cmb2-id--job-apply-url').show(); 1928 $('.cmb2-id--job-apply-email').hide(); 1929 $('.cmb2-id--job-phone').hide(); 1930 } else if ( apply_type == 'with_email' ) { 1931 $('.cmb2-id--job-apply-url').hide(); 1932 $('.cmb2-id--job-phone').hide(); 1933 $('.cmb2-id--job-apply-email').show(); 1934 } else if ( apply_type == 'call' ) { 1935 $('.cmb2-id--job-apply-url').hide(); 1936 $('.cmb2-id--job-apply-email').hide(); 1937 $('.cmb2-id--job-phone').show(); 1938 } 1939 }); 1940 }, 1941 filterListing: function() { 1942 var self = this; 1943 1944 $(document).on('click', 'form .toggle-field .heading-label', function(){ 1945 var container = $(this).closest('.form-group'); 1946 container.find('.form-group-inner').slideToggle(); 1947 if ( container.hasClass('hide-content') ) { 1948 container.removeClass('hide-content'); 1949 } else { 1950 container.addClass('hide-content'); 1951 } 1952 }); 1953 $(document).on('click', '.toggle-filter-list', function() { 1954 var $this = $(this); 1955 var container = $(this).closest('.form-group'); 1956 container.find('.terms-list .more-fields').each(function(){ 1957 if ( $(this).hasClass('active') ) { 1958 $(this).removeClass('active'); 1959 $this.find('.text').text(wp_job_board_pro_opts.show_more); 1960 } else { 1961 $(this).addClass('active'); 1962 $this.find('.text').text(wp_job_board_pro_opts.show_less); 1963 } 1964 }); 1965 }); 1966 1967 if ( $.isFunction( $.fn.slider ) ) { 1968 $('.search-distance-slider').each(function(){ 1969 var $this = $(this); 1970 var search_distance = $this.closest('.search-distance-wrapper').find('input[name^=filter-distance]'); 1971 var search_wrap = $this.closest('.search_distance_wrapper'); 1972 $(this).slider({ 1973 range: "min", 1974 value: search_distance.val(), 1975 min: 0, 1976 max: 100, 1977 slide: function( event, ui ) { 1978 search_distance.val( ui.value ); 1979 $('.text-distance', search_wrap).text( ui.value ); 1980 $('.distance-custom-handle', $this).attr( "data-value", ui.value ); 1981 search_distance.trigger('change'); 1982 }, 1983 create: function() { 1984 $('.distance-custom-handle', $this).attr( "data-value", $( this ).slider( "value" ) ); 1985 } 1986 } ); 1987 } ); 1988 1989 $('.main-range-slider').each(function(){ 1990 var $this = $(this); 1991 $this.slider({ 1992 range: true, 1993 min: $this.data('min'), 1994 max: $this.data('max'), 1995 values: [ $this.parent().find('.filter-from').val(), $this.parent().find('.filter-to').val() ], 1996 slide: function( event, ui ) { 1997 $this.parent().find('.from-text').text( ui.values[ 0 ] ); 1998 $this.parent().find('.filter-from').val( ui.values[ 0 ] ) 1999 $this.parent().find('.to-text').text( ui.values[ 1 ] ); 2000 $this.parent().find('.filter-to').val( ui.values[ 1 ] ); 2001 $this.parent().find('.filter-to').trigger('change'); 2002 } 2003 } ); 2004 }); 2005 2006 $('.salary-range-slider').each(function(){ 2007 var $this = $(this); 2008 $this.slider({ 2009 range: true, 2010 min: $this.data('min'), 2011 max: $this.data('max'), 2012 values: [ $this.parent().find('.filter-from').val(), $this.parent().find('.filter-to').val() ], 2013 slide: function( event, ui ) { 2014 $this.parent().find('.from-text .price-text').text( self.addCommas(ui.values[ 0 ]) ); 2015 $this.parent().find('.filter-from').val( ui.values[ 0 ] ) 2016 $this.parent().find('.to-text .price-text').text( self.addCommas(ui.values[ 1 ]) ); 2017 $this.parent().find('.filter-to').val( ui.values[ 1 ] ); 2018 $this.parent().find('.filter-to').trigger('change'); 2019 } 2020 } ); 2021 }); 2022 } 2023 2024 $('.find-me').on('click', function() { 2025 $(this).addClass('loading'); 2026 var this_e = $(this); 2027 var container = $(this).closest('.form-group'); 2028 2029 navigator.geolocation.getCurrentPosition(function (position) { 2030 container.find('input[name="filter-center-latitude"]').val(position.coords.latitude); 2031 container.find('input[name="filter-center-longitude"]').val(position.coords.longitude); 2032 container.find('input[name="filter-center-location"]').val('Location'); 2033 container.find('.clear-location').removeClass('hidden');
2034 container.find('.leaflet-geocode-container').html('').removeClass('active'); 2035 var position = [position.coords.latitude, position.coords.longitude]; 2036 2037 if ( typeof L.esri.Geocoding.geocodeService != 'undefined' ) { 2038 2039 var geocodeService = L.esri.Geocoding.geocodeService(); 2040 geocodeService.reverse().latlng(position).run(function(error, result) { 2041 container.find('input[name="filter-center-location"]').val(result.address.Match_addr); 2042 }); 2043 } 2044 2045 return this_e.removeClass('loading'); 2046 }, function (e) { 2047 return this_e.removeClass('loading'); 2048 }, { 2049 enableHighAccuracy: true 2050 }); 2051 }); 2052 2053 $('.clear-location').on('click', function() { 2054 var container = $(this).closest('.form-group'); 2055 2056 container.find('input[name="filter-center-latitude"]').val(''); 2057 container.find('input[name="filter-center-longitude"]').val(''); 2058 container.find('input[name="filter-center-location"]').val('').trigger('keyup'); 2059 container.find('.clear-location').addClass('hidden'); 2060 }); 2061 $('input[name="filter-center-location"]').on('keyup', function(){ 2062 var container = $(this).closest('.form-group'); 2063 var val = $(this).val(); 2064 if ( $(this).val() !== '' ) { 2065 container.find('.clear-location').removeClass('hidden'); 2066 } else { 2067 container.find('.clear-location').removeClass('hidden').addClass('hidden'); 2068 } 2069 }); 2070 2071 // search autocomplete location 2072 if ( wp_job_board_pro_opts.map_service == 'google-map' ) { 2073 2074 } else { 2075 if ( typeof L.Control.Geocoder.Nominatim != 'undefined' ) { 2076 if ( wp_job_board_pro_opts.geocoder_country ) { 2077 var geocoder = new L.Control.Geocoder.Nominatim({ 2078 geocodingQueryParams: {countrycodes: wp_job_board_pro_opts.geocoder_country, lang: wp_job_board_pro_opts.geocoder_country} 2079 }); 2080 } else { 2081 var geocoder = new L.Control.Geocoder.Nominatim(); 2082 } 2083 2084 function delay(fn, ms) { 2085 let timer = 0 2086 return function(...args) { 2087 clearTimeout(timer) 2088 timer = setTimeout(fn.bind(this, ...args), ms || 0) 2089 } 2090 } 2091 2092 $("input[name=filter-center-location]").attr('autocomplete', 'off').after('<div class="leaflet-geocode-container"></div>'); 2093 $("input[name=filter-center-location]").on("keyup", delay(function (e) { 2094 var s = $(this).val(), $this = $(this), container = $(this).closest('.form-group-inner'); 2095 if (s && s.length >= 3) { 2096 2097 $this.parent().addClass('loading'); 2098 geocoder.geocode(s, function(results) { 2099 var output_html = ''; 2100 for (var i = 0; i < results.length; i++) { 2101 output_html += '<li class="result-item" data-latitude="'+results[i].center.lat+'" data-longitude="'+results[i].center.lng+'" ><i class="fa fa-map-marker" aria-hidden="true"></i> '+results[i].name+'</li>'; 2102 } 2103 if ( output_html ) { 2104 output_html = '<ul>'+ output_html +'</ul>'; 2105 } 2106 2107 container.find('.leaflet-geocode-container').html(output_html).addClass('active'); 2108 2109 var highlight_texts = s.split(' '); 2110
2111 highlight_texts.forEach(function (item) { 2112 container.find('.leaflet-geocode-container').highlight(item); 2113 }); 2114 2115 $this.parent().removeClass('loading'); 2116 }); 2117 } else { 2118 container.find('.leaflet-geocode-container').html('').removeClass('active'); 2119 } 2120 }, 500)); 2121 $('.form-group-inner').on('click', '.leaflet-geocode-container ul li', function() { 2122 var container = $(this).closest('.form-group-inner'); 2123 container.find('input[name=filter-center-latitude]').val($(this).data('latitude')); 2124 container.find('input[name=filter-center-longitude]').val($(this).data('longitude')); 2125 container.find('input[name=filter-center-location]').val($(this).text()); 2126 container.find('.leaflet-geocode-container').removeClass('active').html(''); 2127 }); 2128 } 2129 } 2130 2131 }, 2132 employerAddEmployee: function() { 2133 var self = this; 2134 2135 // add 2136 $(document).on('submit', 'form.employer-add-employees-form', function(e) { 2137 e.preventDefault(); 2138 var $this = $(this); 2139 if ( $this.hasClass('loading') ) { 2140 return false; 2141 } 2142 $this.addClass('loading'); 2143 $.ajax({
2144 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_employer_add_employee' ), 2145 type:'POST', 2146 dataType: 'json', 2147 data: $this.serialize() + '&action=wp_job_board_pro_ajax_employer_add_employee' 2148 }).done(function(data) { 2149 $this.removeClass('loading'); 2150 if ( data.status ) { 2151 $('.employer-employees-list-inner').prepend(data.html); 2152 if ( $('.employer-employees-list-inner .not-found').length ) { 2153 $('.employer-employees-list-inner .not-found').remove(); 2154 } 2155 $this.find('.team-employee-inner').remove(); 2156 } 2157 self.showMessage(data.msg, data.status); 2158 }); 2159 return false; 2160 }); 2161 // remove 2162 $(document).on('click', '.btn-employer-remove-employee', function() { 2163 var $this = $(this); 2164 var r = confirm( wp_job_board_pro_opts.rm_item_txt ); 2165 if ( r == true ) { 2166 $this.addClass('loading'); 2167 var employee_id = $(this).data('employee_id'); 2168 var nonce = $(this).data('nonce'); 2169 $.ajax({
2170 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_employer_remove_employee' ), 2171 type:'POST', 2172 dataType: 'json', 2173 data: { 2174 'employee_id': employee_id, 2175 'nonce': nonce, 2176 'action': 'wp_job_board_pro_ajax_employer_remove_employee', 2177 } 2178 }).done(function(data) { 2179 $this.removeClass('loading'); 2180 if ( data.status ) { 2181 $this.closest('article.employee-team-wrapper').remove(); 2182 } 2183 self.showMessage(data.msg, data.status); 2184 }); 2185 } 2186 }); 2187 }, 2188 inviteCandidate: function() { 2189 var self = this; 2190 2191 $(document).on('click', '.cannot-download-cv-btn', function() { 2192 var msg = $(this).data('msg'); 2193 self.showMessage(msg, false); 2194 }); 2195 $('.btn-invite-candidate:not(.cannot-download-cv-btn)').magnificPopup({ 2196 mainClass: 'apus-mfp-zoom-in', 2197 type:'inline', 2198 midClick: true 2199 }); 2200 2201 // add 2202 $(document).on('submit', 'form.invite-candidate-form', function(e) { 2203 e.preventDefault(); 2204 var $this = $(this); 2205 if ( $this.hasClass('loading') ) { 2206 return false; 2207 } 2208 if ( self.inviteAjax ) { 2209 self.inviteAjax.abort(); 2210 } 2211 2212 $this.find('.alert').remove(); 2213 $this.addClass('loading'); 2214 self.inviteAjax = $.ajax({ 2215 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_invite_candidate' ), 2216 type:'POST', 2217 dataType: 'json', 2218 data: $this.serialize() 2219 }).done(function(data) { 2220 $this.removeClass('loading'); 2221 2222 if ( data.status ) { 2223 $this.prepend( '<div class="alert alert-info">'+data.msg+'</div>' ); 2224 } else { 2225 $this.prepend( '<div class="alert alert-warning">'+data.msg+'</div>' ); 2226 } 2227 2228 self.inviteAjax = false; 2229 }); 2230 return false; 2231 }); 2232 }, 2233 mixesFn: function() { 2234 var self = this; 2235 2236 $( '.my-jobs-ordering' ).on( 'change', 'select.orderby', function() { 2237 $( this ).closest( 'form' ).submit(); 2238 }); 2239 2240 $('.contact-form-wrapper').on('submit', function(){ 2241 var $this = $(this); 2242 $this.find('.alert').remove(); 2243 $this.addClass('loading'); 2244 $.ajax({
2245 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_contact_form' ), 2246 type:'POST', 2247 dataType: 'json', 2248 data: $this.serialize() + '&action=wp_job_board_pro_ajax_contact_form' 2249 }).done(function(data) { 2250 $this.removeClass('loading'); 2251 if ( data.status ) { 2252 $this.prepend( '<div class="alert alert-info">'+data.msg+'</div>' ); 2253 } else { 2254 $this.prepend( '<div class="alert alert-warning">'+data.msg+'</div>' ); 2255 } 2256 }); 2257 2258 return false; 2259 }); 2260 2261 $(document).on( 'submit', 'form.delete-profile-form', function() { 2262 var $this = $(this); 2263 $this.addClass('loading'); 2264 $(this).find('.alert').remove(); 2265 $.ajax({ 2266 url: wp_job_board_pro_opts.ajaxurl, 2267 type:'POST', 2268 dataType: 'json', 2269 data: $this.serialize() + '&action=wp_job_board_pro_ajax_delete_profile' 2270 }).done(function(data) { 2271 $this.removeClass('loading'); 2272 if ( data.status ) { 2273 $this.prepend( '<div class="alert alert-info">'+data.msg+'</div>' ); 2274 window.location.href = wp_job_board_pro_opts.home_url; 2275 } else { 2276 $this.prepend( '<div class="alert alert-warning">'+data.msg+'</div>' ); 2277 } 2278 }); 2279 2280 return false; 2281 }); 2282 2283 $('.cannot-download-cv-btn').on('click', function(e) { 2284 e.preventDefault(); 2285 self.showMessage($(this).data('msg'), false); 2286 }); 2287 2288 // Location Change 2289 $('body').on('change', 'select.select-field-region', function(){ 2290 var val = $(this).val(); 2291 var next = $(this).data('next'); 2292 var hide_empty = $(this).data('hide_empty'); 2293 var main_select = 'select.select-field-region' + next; 2294 if ( $(main_select).length > 0 ) { 2295 2296 var select2_args = wp_job_board_pro_select2_opts; 2297 select2_args['allowClear'] = true; 2298 select2_args['minimumResultsForSearch'] = 10; 2299 select2_args['width'] = '100%'; 2300 2301 if ( typeof wp_job_board_pro_select2_opts.language_result !== 'undefined' ) { 2302 select2_args['language'] = { 2303 noResults: function(){ 2304 return wp_job_board_pro_select2_opts.language_result; 2305 } 2306 }; 2307 } 2308 2309 $(main_select).prop('disabled', true); 2310 $(main_select).val('').trigger('change'); 2311 2312 if ( val ) { 2313 $(main_select).parent().addClass('loading'); 2314 $.ajax({
2315 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wpjb_process_change_location' ), 2316 type:'POST', 2317 dataType: 'json', 2318 data:{ 2319 'action': 'wpjb_process_change_location', 2320 'parent': val, 2321 'hide_empty': hide_empty, 2322 'taxonomy': $(main_select).data('taxonomy'), 2323 'security': wp_job_board_pro_opts.ajax_nonce, 2324 } 2325 }).done(function(data) { 2326 $(main_select).parent().removeClass('loading'); 2327 2328 $(main_select).find('option').remove(); 2329 if ( data ) { 2330 $.each(data, function(i, item) { 2331 var option = new Option(item.name, item.id, true, true); 2332 $(main_select).append(option); 2333 }); 2334 } 2335 $(main_select).prop("disabled", false); 2336 $(main_select).val(null).select2("destroy").select2(select2_args); 2337 }); 2338 } else { 2339 $(main_select).find('option').remove(); 2340 $(main_select).prop("disabled", false); 2341 $(main_select).val(null).select2("destroy").select2(select2_args); 2342 } 2343 } 2344 }); 2345 2346 // remove notify 2347 $('.notifications-wrapper').on('click', '.remove-notify-btn', function(e) { 2348 e.stopPropagation(); 2349 var $this = $(this); 2350 2351 $this.addClass('loading'); 2352 var unique_id = $(this).data('id'); 2353 var nonce = $(this).data('nonce'); 2354 $.ajax({
2355 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wp_job_board_pro_ajax_remove_notify' ), 2356 type:'POST', 2357 dataType: 'json', 2358 data: { 2359 'unique_id': unique_id, 2360 'nonce': nonce, 2361 } 2362 }).done(function(data) { 2363 $this.removeClass('loading'); 2364 if ( data.status ) { 2365 if ( $this.closest('ul').find('li').length > 1 ) { 2366 $this.closest('li').remove(); 2367 } else { 2368 window.location.reload(true); 2369 } 2370 } 2371 self.showMessage(data.msg, data.status); 2372 }); 2373 2374 }); 2375 2376 // currencies 2377 $('body').on('change', '.jobs-currencies input', function(){ 2378 $(this).closest('form').trigger('submit'); 2379 }); 2380 }, 2381 addCommas: function(str) { 2382 var parts = (str + "").split("."), 2383 main = parts[0], 2384 len = main.length, 2385 output = "", 2386 first = main.charAt(0), 2387 i; 2388 2389 if (first === '-') { 2390 main = main.slice(1); 2391 len = main.length; 2392 } else { 2393 first = ""; 2394 } 2395 i = len - 1; 2396 while(i >= 0) { 2397 output = main.charAt(i) + output; 2398 if ((len - i) % 3 === 0 && i > 0) { 2399 output = wp_job_board_pro_opts.money_thousands_separator + output; 2400 } 2401 --i; 2402 } 2403 // put sign back 2404 output = first + output; 2405 // put decimal part back 2406 if (parts.length > 1) { 2407 output += wp_job_board_pro_opts.money_dec_point + parts[1]; 2408 } 2409 return output; 2410 }, 2411 showMessage: function(msg, status) { 2412 if ( msg ) { 2413 var classes = 'alert bg-warning'; 2414 if ( status ) { 2415 classes = 'alert bg-info'; 2416 } 2417 var $html = '<div id="wp-job-board-pro-popup-message" class="animated fadeInRight"><div class="message-inner '+ classes +'">'+ msg +'</div></div>'; 2418 $('body').find('#wp-job-board-pro-popup-message').remove(); 2419 $('body').append($html).fadeIn(500); 2420 setTimeout(function() { 2421 $('body').find('#wp-job-board-pro-popup-message').removeClass('fadeInRight').addClass('delay-2s fadeOutRight'); 2422 }, 2500); 2423 } 2424 }, 2425 setCookie: function(cname, cvalue, exdays) { 2426 var d = new Date(); 2427 d.setTime(d.getTime() + (exdays*24*60*60*1000)); 2428 var expires = "expires="+d.toUTCString(); 2429 document.cookie = cname + "=" + cvalue + "; " + expires+";path=/"; 2430 }, 2431 getCookie: function(cname) { 2432 var name = cname + "="; 2433 var ca = document.cookie.split(';'); 2434 for(var i=0; i<ca.length; i++) { 2435 var c = ca[i]; 2436 while (c.charAt(0)==' ') c = c.substring(1); 2437 if (c.indexOf(name) == 0) return c.substring(name.length,c.length); 2438 } 2439 return ""; 2440 }, 2441 } 2442 2443 $.wjbpMainCore = WJBPMainCore.prototype; 2444 2445 $(document).ready(function() { 2446 // Initialize script 2447 new WJBPMainCore(); 2448 2449 }); 2450 2451})(jQuery); 2452 2453if ( wp_job_board_pro_opts.map_service == 'google-map' ) { 2454 if (typeof google === 'object' && typeof google.maps === 'object') { 2455 function search_location_initialize() { 2456 2457 jQuery('input[name="filter-center-location"]').each(function(){ 2458 var $id = jQuery(this).attr('id'); 2459 2460 if ( typeof $id !== 'undefined' ) { 2461 var container = jQuery('#'+$id).closest('.form-group-inner'); 2462 var input = document.getElementById($id); 2463 var autocomplete = new google.maps.places.Autocomplete(input); 2464 autocomplete.setTypes([]); 2465 2466 if ( wp_job_board_pro_opts.geocoder_country ) { 2467 autocomplete.setComponentRestrictions({ 2468 country: [wp_job_board_pro_opts.geocoder_country], 2469 }); 2470 } 2471 2472 autocomplete.addListener( 'place_changed', function () { 2473 var place = autocomplete.getPlace(); 2474 place.toString(); 2475 2476 if (!place.geometry) { 2477 window.alert("No details available for input
2477: '" + place.name + "'"); 2478 return; 2479 } 2480 2481 container.find('input[name=filter-center-latitude]').val(place.geometry.location.lat()); 2482 container.find('input[name=filter-center-longitude]').val(place.geometry.location.lng()); 2483 2484 }); 2485 } 2486 }); 2487 } 2488 google.maps.event.addDomListener(window, 'load', search_location_initialize); 2489 } 2490}
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.