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