1(function($) { 2 "use strict"; 3 4 var __cache = []; 5 $.extend($.apusThemeCore, { 6 /** 7 * Initialize scripts 8 */ 9 job_init: function() { 10 var self = this; 11 12 self.select2Init(); 13 14 self.searchAjaxInit(); 15 16 self.listingDetail(); 17 18 self.filterListingFnc(); 19 20 self.listingBtnFilter(); 21 22 self.portfolio(); 23 24 self.sendPrivateMessage(); 25 26 self.changeHeightJobsDetail(); 27 28 setTimeout(function(){ 29 self.changePaddingTopContent(); 30 $(window).trigger('resize'); 31 }, 100); 32 33 self.checkSidebar(); 34 35 $(window).resize(function(){ 36 setTimeout(function(){ 37 self.changePaddingTopContent(); 38 self.changeHeightJobsDetail(); 39 }, 50); 40 }); 41 42 self.userLoginRegister(); 43 44 self.dashboardChart(); 45 46 if ( $('.jobs-listing-wrapper.main-items-wrapper, .employers-listing-wrapper.main-items-wrapper, .candidates-listing-wrapper.main-items-wrapper').length ) { 47 $(document).on('change', 'form.filter-listing-form-wrapper input, form.filter-listing-form-wrapper select', function (e) { 48 var form = $(this).closest('form.filter-listing-form-wrapper'); 49 if ( $(this).attr('name') == 'filter-salary-type' ) { 50 form.find('input[name=filter-salary-from]').val(''); 51 form.find('input[name=filter-salary-to]').val(''); 52 } 53 setTimeout(function(){ 54 form.trigger('submit'); 55 }, 200); 56 }); 57 58 $(document).on('submit', 'form.filter-listing-form-wrapper', function (e) { 59 e.preventDefault(); 60 var url = $(this).attr('action'); 61 62 var formData = $(this).find(":input").filter(function(index, element) { 63 return $(element).val() != ''; 64 }).serialize(); 65 66 if( url.indexOf('?') != -1 ) { 67 url = url + '&' + formData; 68 } else{ 69 url = url + '?' + formData; 70 } 71 self.jobsGetPage( url ); 72 return false; 73 }); 74 } 75 // Sort Action 76 $(document).on('change', 'form.jobs-ordering select.orderby', function(e) { 77 e.preventDefault(); 78 $('form.jobs-ordering').trigger('submit'); 79 }); 80 81 $(document).on('submit', 'form.jobs-ordering', function (e) { 82 var url = $(this).attr('action'); 83 84 var formData = $(this).find(":input").filter(function(index, element) { 85 return $(element).val() != ''; 86 }).serialize(); 87 88 if( url.indexOf('?') != -1 ) { 89 url = url + '&' + formData; 90 } else{ 91 url = url + '?' + formData; 92 } 93 self.jobsGetPage( url ); 94 return false; 95 }); 96 // ajax pagination 97 if ( $('.ajax-pagination').length ) { 98 self.ajaxPaginationLoad(); 99 } 100 101 $(document).on('click', '.advance-search-btn', function(e) { 102 e.preventDefault(); 103 $(this).closest('.filter-listing-form').find('.advance-search-wrapper').slideToggle('fast', 'swing'); 104 }); 105 106 107 108 // message notification 109 $('.message-notification').on('click', function (e) { 110 e.stopPropagation(); 111 $('.notifications-wrapper').toggleClass('active'); 112 $('.message-top .notifications-wrapper.active').perfectScrollbar(); 113 }); 114 115 $('body').on('click', function() { 116 if ($('.notifications-wrapper').hasClass('active')) { 117 $('.notifications-wrapper').removeClass('active'); 118 } 119 }); 120 $('.notifications-wrapper').on('click', function(e) { 121 e.stopPropagation(); 122 }); 123 124 $('body').on('click', '.close-filter-sidebar', function(){ 125 var parent = $(this).closest('.inner-left'); 126 parent.find('.filter-sidebar').removeClass('active'); 127 parent.find('.over-dark').removeClass('active'); 128 }); 129 130 131 132 }, 133 134 checkSidebar: function(){ 135 $('.sidebar-job > .widget').each(function(){ 136 var $this = $(this); 137 if( $this.find('> *').length > 0 ){ 138 $this.addClass('has-content'); 139 } 140 }); 141 }, 142 143 dashboardChart: function(){ 144 var self = this; 145 146 // candidate chart 147 if ( $('#dashboard_chart_wrapper').length ) { 148 var $this = $('#dashboard_chart_wrapper'); 149 150 var labels = $this.data('labels'); 151 var values = $this.data('values'); 152 var label = $this.data('label'); 153 var chart_type = $this.data('chart_type'); 154 var bg_color = $this.data('bg_color'); 155 var border_color = $this.data('border_color'); 156 157 var ctx = $this.get(0).getContext("2d"); 158 var data = { 159 labels: labels, 160 datasets: [ 161 { 162 label: label, 163 backgroundColor: bg_color, 164 borderColor: border_color, 165 borderWidth: 1, 166 data: values 167 }, 168 ] 169 }; 170 171 var options = { 172 //Boolean - Whether the scale should start at zero, or an order of magnitude down from the lowest value 173 scaleBeginAtZero : true, 174 //Boolean - Whether grid lines are shown across the chart 175 scaleShowGridLines : false, 176 //String - Colour of the grid lines 177 scaleGridLineColor : "rgba(0,0,0,.05)", 178 //Number - Width of the grid lines 179 scaleGridLineWidth : 1, 180 //Boolean - Whether to show horizontal lines (except X axis) 181 scaleShowHorizontalLines: true, 182 //Boolean - Whether to show vertical lines (except Y axis) 183 scaleShowVerticalLines: true, 184 //Boolean - If there is a stroke on each bar 185 barShowStroke : false, 186 //Number - Pixel width of the bar stroke 187 barStrokeWidth : 2, 188 //Number - Spacing between each of the X value sets 189 barValueSpacing : 5, 190 //Number - Spacing between data sets within X values 191 barDatasetSpacing : 1, 192 legend: { display: false }, 193 194 tooltips: { 195 enabled: true, 196 mode: 'x-axis', 197 cornerRadius: 4 198 }, 199 } 200 201 var myBarChart = new Chart(ctx, { 202 type: chart_type, 203 data: data, 204 options: options 205 }); 206 } 207 208 209 // scrollbar notifications 210 $('.dashboard-notifications-wrapper').perfectScrollbar(); 211 212 // employer chart 213 var self = this; 214 var $this = $('#dashboard_job_chart_wrapper'); 215 if( $this.length <= 0 ) { 216 return; 217 } 218 219 // select2 220 if ( $.isFunction( $.fn.select2 ) && typeof wp_job_board_pro_select2_opts !== 'undefined' ) { 221 var select2_args = wp_job_board_pro_select2_opts; 222 select2_args['allowClear'] = false;
223 select2_args['minimumResultsForSearch'] = 10; 224 225 select2_args['language'] = { 226 noResults: function(){ 227 return wp_job_board_pro_select2_opts.language_result; 228 } 229 }; 230 231 select2_args['width'] = '100%'; 232 233 $('.stats-graph-search-form select').select2( select2_args ); 234 } 235 236 237 var job_id = $this.data('job_id'); 238 var nb_days = $this.data('nb_days'); 239 self.dashboardChartAjaxInit($this, job_id, nb_days); 240 241 $('form.stats-graph-search-form select[name="job_id"]').on('change', function(){ 242 $('form.stats-graph-search-form').trigger('submit'); 243 }); 244 245 $('form.stats-graph-search-form select[name="nb_days"]').on('change', function(){ 246 $('form.stats-graph-search-form').trigger('submit'); 247 }); 248 249 $('form.stats-graph-search-form').on('submit', function(e){ 250 e.preventDefault(); 251 var job_id = $('form.stats-graph-search-form select[name="job_id"]').val(); 252 var nb_days = $('form.stats-graph-search-form select[name="nb_days"]').val(); 253 self.dashboardChartAjaxInit($this, job_id, nb_days); 254 return false; 255 }); 256 257 }, 258 dashboardChartAjaxInit: function($this, job_id, nb_days) { 259 var self = this; 260 if( $this.length <= 0 ) { 261 return; 262 } 263 if ( $this.hasClass('loading') ) { 264 return; 265 } 266 $this.addClass('loading'); 267 268 var ajaxurl = superio_job_opts.ajaxurl; 269 if ( typeof wp_job_board_pro_opts.ajaxurl_endpoint !== 'undefined' ) { 270 ajaxurl = wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'superio_get_job_chart' ); 271 } 272 273 $.ajax({ 274 url: ajaxurl, 275 type:'POST', 276 dataType: 'json', 277 data: { 278 action: 'superio_get_job_chart', 279 job_id: job_id, 280 nb_days: nb_days, 281 nonce: $this.data('nonce'), 282 } 283 }).done(function(response) { 284 if (response.status == 'error') { 285 $this.remove(); 286 } else { 287 var ctx = $this.get(0).getContext("2d"); 288 289 var data = { 290 labels: response.stats_labels, 291 datasets: [ 292 { 293 label: response.stats_view, 294 backgroundColor: response.bg_color, 295 borderColor: response.border_color, 296 borderWidth: 1, 297 data: response.stats_values 298 }, 299 ] 300 }; 301 302 var options = { 303 //Boolean - Whether the scale should start at zero, or an order of magnitude down from the lowest value 304 scaleBeginAtZero : true, 305 //Boolean - Whether grid lines are shown across the chart 306 scaleShowGridLines : false, 307 //String - Colour of the grid lines 308 scaleGridLineColor : "rgba(0,0,0,.05)", 309 //Number - Width of the grid lines 310 scaleGridLineWidth : 1, 311 //Boolean - Whether to show horizontal lines (except X axis) 312 scaleShowHorizontalLines: true, 313 //Boolean - Whether to show vertical lines (except Y axis) 314 scaleShowVerticalLines: true, 315 //Boolean - If there is a stroke on each bar 316 barShowStroke : false, 317 //Number - Pixel width of the bar stroke 318 barStrokeWidth : 2, 319 //Number - Spacing between each of the X value sets 320 barValueSpacing : 5, 321 //Number - Spacing between data sets within X values 322 barDatasetSpacing : 1, 323 legend: { display: false }, 324 325 tooltips: { 326 enabled: true, 327 mode: 'x-axis', 328 cornerRadius: 4 329 }, 330 } 331 332 if (typeof self.myBarChart !== 'undefined') { 333 self.myBarChart.destroy(); 334 } 335 336 self.myBarChart = new Chart(ctx, { 337 type: response.chart_type, 338 data: data, 339 options: options 340 }); 341 } 342 $this.removeClass('loading'); 343 }); 344 }, 345 portfolio: function() { 346 $('.portfolio').each(function(){ 347 var $this = $(this); 348 $('.view-more-gallery', $this).on('click', function(e){ 349 $('.item', $this).removeClass('hidden'); 350 $('.popup-image-gallery').removeClass('view-more-image'); 351 $(this).addClass('hidden'); 352 $(document).trigger('resize'); 353 }); 354 }); 355 }, 356 sendPrivateMessage: function() { 357 var self = this; 358 $('.send-private-message-btn').magnificPopup({ 359 mainClass: 'apus-mfp-zoom-in login-popup', 360 type:'inline', 361 midClick: true 362 }); 363 }, 364 select2Init: function() { 365 // select2 366 var self = this; 367 if ( $.isFunction( $.fn.select2 ) && typeof wp_job_board_pro_select2_opts !== 'undefined' ) { 368 var select2_args = wp_job_board_pro_select2_opts; 369 select2_args['allowClear'] = true; 370 select2_args['minimumResultsForSearch'] = 10; 371 select2_args['language'] = { 372 noResults: function (params) { 373 return select2_args['language_result']; 374 } 375 } 376 377 $('.select-taxonomy-search' ).each(function(){ 378 self.select2SearchInit($(this), select2_args, false); 379 }); 380 381 $('.select-field-region-search' ).each(function(){ 382 self.select2SearchInit( $(this), select2_args, true ); 383 }); 384 385 $('body').on('change', 'select.select-field-region-search', function(){ 386 var val = $(this).val(); 387 var next = $(this).data('next'); 388 var main_select = 'select.select-field-region-search' + next; 389 if ( $(main_select).length > 0 ) { 390 $(main_select).val(null).trigger("change"); 391 } 392 }); 393 394 $('.filter-listing-form select:not(.select-taxonomy-search, .select-field-region-search)').select2( select2_args ); 395 396 select2_args['allowClear'] = false;
397 398 $( 'select[name=jobs_ppp]' ).select2( select2_args ); 399 $( 'select[name=candidates_ppp]' ).select2( select2_args ); 400 $( 'select[name=employers_ppp]' ).select2( select2_args ); 401 402 // filter 403 404 $('select[name=email_frequency]').select2( select2_args ); 405 } 406 }, 407 select2SearchInit: function($element, select2_args, region) { 408 $element.select2({ 409 allowClear: true, 410 width: '100%', 411 dir: select2_args['dir'], 412 language: { 413 noResults: function (params) { 414 return select2_args['language_result']; 415 }, 416 inputTooShort: function () { 417 return select2_args['formatInputTooShort_text']; 418 } 419 }, 420 minimumInputLength: 2, 421 ajax: { 422 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wpjb_search_terms' ), 423 dataType: 'json', 424 delay: 250, 425 data: function (params) { 426 if ( region ) { 427 var parent_id = 0; 428 var prev = $element.data('prev'); 429 var prev_select = $('.select-field-region-search' + prev); 430 if ( prev_select.length ) { 431 parent_id = prev_select.val(); 432 if ( !parent_id ) { 433 parent_id = 'lost-parent'; 434 } 435 436 } 437 var query = { 438 search: params.term, 439 page: params.page || 1, 440 taxonomy: $element.data('taxonomy'), 441 parent: parent_id, 442 prev: prev 443 } 444 } else { 445 var query = { 446 search: params.term, 447 page: params.page || 1, 448 taxonomy: $element.data('taxonomy'), 449 parent: '', 450 prev: '', 451 } 452 } 453 454 455 // Query parameters will be ?search=[term]&type=public 456 return query; 457 }, 458 processResults: function (data, params) { 459 params.page = params.page || 1; 460 461 return { 462 results: $.map(data.results, function (item) { 463 return { 464 text: item.name, 465 id: item.id 466 } 467 }), 468 pagination: { 469 more: params.page < data.pages 470 } 471 }; 472 }, 473 transport: function(params, success, failure) { 474 //retrieve the cached key or default to _ALL_ 475 var __cachekey = params.data.search + '-' + params.data.taxonomy + '-' + params.data.page + '-' + params.data.parent + params.data.prev; 476 477 if ('undefined' !== typeof __cache[__cachekey]) { 478 //display the cached results 479 success(__cache[__cachekey]); 480 return; /* noop */ 481 } 482 var $request = $.ajax(params); 483 $request.then(function(data) { 484 //store data in cache 485 __cache[__cachekey] = data; 486 //display the results 487 success(__cache[__cachekey]); 488 }); 489 $request.fail(failure); 490 return $request; 491 }, 492 cache: true 493 } 494 495 }); 496 }, 497 changeHeightJobsDetail: function() { 498 var heightdetail = 0; 499 if ( $('#job-details-wrapper .top-detail-job').length ){ 500 var heightdetail = $('#job-details-wrapper .top-detail-job').outerHeight(); 501 } 502 $('#job-details-wrapper .job-content-area').css({ 'height': 'calc( 100vh - ' + ( heightdetail + 20 ) + 'px' }); 503 }, 504 changePaddingTopContent: function() { 505 var admin_bar_h = 0; 506 if ( $('#wpadminbar').length ){ 507 var admin_bar_h = $('#wpadminbar').outerHeight(); 508 } 509 if ($(window).width() >= 1200) { 510 var header_h = $('#apus-header').outerHeight(); 511 512 var header_top_h = header_h; 513 var header_main_content_h = header_h - admin_bar_h; 514 $('body.page-template-page-dashboard #apus-main-content').css({ 'padding-top': header_h }); 515 if ( $('.layout-type-fullwidth .filter-sidebar').length ) { 516 $('.layout-type-fullwidth .filter-sidebar').css({ 'top': header_h, 'height': 'calc( 100vh - ' + header_h + 'px )' }); 517 $('#apus-main-content').css({ 'padding-top': header_main_content_h }); 518 } 519 } else { 520 var header_h = $('#apus-header-mobile').outerHeight(); 521 522 if ( $('#jobs-google-maps').is('.fix-map') ) { 523 var header_top_h = header_h + admin_bar_h; 524 var header_main_content_h = header_h - admin_bar_h; 525 } else if ( $('.layout-type-fullwidth .filter-sidebar').length ) { 526 if ($(window).width() >= 992) { 527 var header_top_h = header_h + admin_bar_h; 528 } else { 529 var header_top_h = header_h - admin_bar_h; 530 } 531 $('.layout-type-fullwidth .filter-sidebar').css({ 'padding-top': header_top_h, 'height': 'calc( 100vh - ' + header_top_h + 'px )' }); 532 $('#apus-main-content').css({ 'padding-top': header_top_h }); 533 } 534 535 $('body.page-template-page-dashboard #apus-main-content').css({ 'padding-top': header_h }); 536 } 537 if ($('#jobs-google-maps').is('.fix-map')) { 538 $('#jobs-google-maps').css({ 'top': header_top_h, 'height': 'calc(100vh - ' + header_top_h+ 'px)' }); 539 $('#apus-main-content').css({ 'padding-top': header_main_content_h }); 540 } 541 542 $('.offcanvas-filter-sidebar .filter-scroll, .layout-type-fullwidth .filter-sidebar').perfectScrollbar(); 543 },
544 searchAjaxInit: function() { 545 if ( $.isFunction( $.fn.typeahead ) ) { 546 $('.apus-autocompleate-input').each(function(){ 547 var $this = $(this); 548 $this.typeahead({ 549 'hint': true, 550 'highlight': true, 551 'minLength': 2, 552 'limit': 10 553 }, { 554 name: 'search', 555 source: function (query, processSync, processAsync) { 556 processSync([superio_job_opts.empty_msg]); 557 $this.closest('.twitter-typeahead').addClass('loading'); 558 559 var values = {}; 560 $.each($this.closest('form').serializeArray(), function (i, field) { 561 values[field.name] = field.value; 562 }); 563 564 return $.ajax({ 565 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'superio_autocomplete_search_jobs' ), 566 type: 'GET', 567 data: { 568 'search': query, 569 'data': values 570 }, 571 dataType: 'json', 572 success: function (json) { 573 $this.closest('.twitter-typeahead').removeClass('loading'); 574 $this.closest('.has-suggestion').removeClass('active'); 575 return processAsync(json); 576 } 577 }); 578 }, 579 templates: { 580 empty : [ 581 '<div class="empty-message">', 582 superio_job_opts.empty_msg, 583 '</div>' 584 ].join('\n'), 585 suggestion: function(data) { 586 return '<a href="'+ data.url +'" class="media autocompleate-media">\ 587 <div class="media-left media-middle">\ 588 <img src="'+ data.image +'" class="media-object" height="50" width="50">\ 589 </div>\ 590 <div class="media-body media-middle">\ 591 <h4>'+ data.title +'</h4>\ 592 '+ data.salary +'\ 593 </div></a>'; 594 } 595 }, 596 } 597 ); 598 $this.on('typeahead:selected', function (e, data) { 599 e.preventDefault(); 600 setTimeout(function(){ 601 $('.apus-autocompleate-input').val(data.title); 602 }, 5); 603 604 return false; 605 }); 606 }); 607 } 608 }, 609 listingDetail: function() { 610 var self = this; 611 612 $(document).on('click', '.add-a-review', function(e) { 613 e.preventDefault(); 614 var $id = $(this).attr('href'); 615 if ( $($id).length > 0 ) { 616 $('html,body').animate({ 617 scrollTop: $($id).offset().top - 100 618 }, 1000); 619 } 620 }); 621 }, 622 listingBtnFilter: function(){ 623 $('.btn-view-map').on('click', function(e){ 624 e.preventDefault(); 625 $('#jobs-google-maps').removeClass('hidden-sm').removeClass('hidden-xs'); 626 $('.content-listing .jobs-listing-wrapper').addClass('hidden-sm').addClass('hidden-xs'); 627 $('.content-listing .candidates-listing-wrapper').addClass('hidden-sm').addClass('hidden-xs'); 628 $('.content-listing').addClass('no-padding'); 629 $('.btn-view-listing').removeClass('hidden-sm').removeClass('hidden-xs'); 630 $(this).addClass('hidden-sm').addClass('hidden-xs'); 631 $('.jobs-pagination-wrapper').addClass('p-fix-pagination'); 632 $('.candidates-pagination-wrapper').addClass('p-fix-pagination'); 633 setTimeout(function() { 634 $(window).trigger('pxg:refreshmap'); 635 }); 636 }); 637 $('.btn-view-listing').on('click', function(e){ 638 e.preventDefault(); 639 $('#jobs-google-maps').addClass('hidden-sm').addClass('hidden-xs'); 640 $('.content-listing .jobs-listing-wrapper').removeClass('hidden-sm').removeClass('hidden-xs'); 641 $('.content-listing .candidates-listing-wrapper').removeClass('hidden-sm').removeClass('hidden-xs'); 642 $('.content-listing').removeClass('no-padding'); 643 $('.btn-view-map').removeClass('hidden-sm').removeClass('hidden-xs'); 644 $(this).addClass('hidden-sm').addClass('hidden-xs'); 645 $('.jobs-pagination-wrapper').removeClass('p-fix-pagination'); 646 $('.candidates-pagination-wrapper').removeClass('p-fix-pagination'); 647 }); 648 649 // $('.show-filter-jobs, .filter-in-sidebar').on('click', function(e){ 650 // e.stopPropagation(); 651 // $('.offcanvas-filter-sidebar').toggleClass('active'); 652 // $('.offcanvas-filter-sidebar + .over-dark').toggleClass('active'); 653 // }); 654 $(document).on('click', '.show-filter-jobs, .filter-in-sidebar', function(){ 655 $('.offcanvas-filter-sidebar').toggleClass('active'); 656 $('.offcanvas-filter-sidebar + .over-dark').toggleClass('active'); 657 }); 658 $(document).on('click', '.offcanvas-filter-sidebar + .over-dark', function(){ 659 $('.offcanvas-filter-sidebar').removeClass('active'); 660 $('.offcanvas-filter-sidebar + .over-dark').removeClass('active'); 661 }); 662 }, 663 664 userLoginRegister: function(){ 665 var self = this; 666 // login/register 667 $('.user-login-form, .must-log-in').on('click', function(e){ 668 if ( $('.apus-user-login').length ) { 669 e.preventDefault(); 670 $('.apus-user-login').trigger('click'); 671 } 672 });
673 $('.apus-user-login, .apus-user-register').magnificPopup({ 674 mainClass: 'apus-mfp-zoom-in login-popup', 675 type:'inline', 676 midClick: true, 677 modal: true, 678 callbacks: { 679 open: function() { 680 self.layzyLoadImage(); 681 } 682 } 683 }); 684 685 $('.meesage-meeting-wrapper').perfectScrollbar(); 686 687 $(".show_hide_password a").on('click', function(event) { 688 event.preventDefault(); 689 if($(this).siblings('input').attr("type") == "text"){ 690 $(this).attr('title', superio_job_opts.show); 691 $(this).siblings('input').attr('type', 'password'); 692 $(this).find('span').addClass( "dashicons-hidden" ); 693 $(this).find('span').removeClass( "dashicons-visibility" ); 694 } else if($(this).siblings('input').attr("type") == "password"){ 695 $(this).attr('title', superio_job_opts.hide); 696 $(this).siblings('input').attr('type', 'text'); 697 $(this).find('span').removeClass( "dashicons-hidden" ); 698 $(this).find('span').addClass( "dashicons-visibility" ); 699 } 700 }); 701 }, 702 703 filterListingFnc: function(){ 704 var self = this; 705 $('body').on('click', '.btn-show-filter, .offcanvas-filter-sidebar + .over-dark', function(){ 706 $('.offcanvas-filter-sidebar, .offcanvas-filter-sidebar + .over-dark').toggleClass('active'); 707 $('.offcanvas-filter-sidebar').perfectScrollbar(); 708 }); 709 710 $('body').on('click', '.tax-radios-field .form-group-inner ul span.caret-wrapper, .tax-checklist-field .form-group-inner ul span.caret-wrapper', function(){ 711 var con = $(this).closest('.list-item'); 712 con.find('> ul').slideToggle(); 713 }); 714 715 716 $('form .toggle-field.hide-content .heading-label i').removeClass('fa-angle-down').addClass('fa-angle-up'); 717 $('body').on('click', 'form .toggle-field .heading-label', function(){ 718 if ( $(this).find('i').hasClass('fa-angle-down') ) { 719 $(this).find('i').removeClass('fa-angle-down').addClass('fa-angle-up'); 720 } else { 721 $(this).find('i').removeClass('fa-angle-up').addClass('fa-angle-down'); 722 } 723 var parent_e = $(this).closest('.form-group'); 724 setTimeout(function(){ 725 726 if ( parent_e.hasClass('tax-viewmore-field') ) { 727 var height = parent_e.find('.terms-list').outerHeight(); 728 if ( height > 231 ) { 729 parent_e.addClass('show-more'); 730 } 731 } 732 }, 300); 733 }); 734 735 $('.tax-viewmore-field').each(function(){ 736 var height = $(this).find('.terms-list').outerHeight(); 737 if ( height > 231 ) { 738 $(this).addClass('show-more'); 739 } 740 }); 741 742 $(document).on('click', '.toggle-filter-viewmore', function() { 743 var $this = $(this); 744 var container = $(this).closest('.tax-viewmore-field'); 745 746 if ( container.hasClass('show-more') ) { 747 container.addClass('show-less').removeClass('show-more'); 748 $this.find('.text').text(wp_job_board_pro_opts.show_less); 749 } else { 750 container.addClass('show-more').removeClass('show-less'); 751 $this.find('.text').text(wp_job_board_pro_opts.show_more); 752 } 753 754 }); 755 756 if ( $( 'input.field-datetimepicker' ).length > 0 && $.isFunction( $.fn.datetimepicker ) ) { 757 jQuery.datetimepicker.setLocale(superio_job_opts.lang_code); 758 $('input.field-datetimepicker').datetimepicker({ 759 timepicker:false, 760 'scrollInput': false, 761 format:'Y/m/d', 762 }); 763 } 764 765 766 if ($(window).width() > 991) { 767 $(document).on('click', '.layout-type-half-job-details .item-job', function(e){ 768 769 if (self.showJobAjax) { return false; } 770 var $this = $(this); 771 self.loadJobDetail($this); 772 773 }); 774 775 $(document).on('click', '.layout-type-half-job-details .item-job .job-title a', function(e){ 776 e.preventDefault(); 777 if (self.showJobAjax) { return false; } 778 var $this = $(this).closest('.item-job'); 779 self.loadJobDetail($this); 780 781 }); 782 } 783 }, 784 loadJobDetail($this){ 785 var self = this; 786 $('#job-details-wrapper').addClass('loading'); 787 788 self.showJobAjax = $.ajax({ 789 url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'superio_show_job_details' ),
790 data: { 791 job_id: $this.attr('data-job_id') 792 }, 793 dataType: 'json', 794 cache: false, 795 headers: {'cache-control': 'no-cache'}, 796 797 method: 'POST', // Note: Using "POST" method for the Ajax request to avoid "load_type" query-string in pagination links 798 799 error: function(XMLHttpRequest, textStatus, errorThrown) { 800 console.log('Apus: AJAX error - ' + errorThrown); 801 802 $('#job-details-wrapper').removeClass('loading'); 803 804 self.showJobAjax = false; 805 }, 806 success: function(response) { 807 if ( response.status ) { 808 $('#job-details-wrapper').html(response.html); 809 810 self.changeHeightJobsDetail(); 811 $this.closest('.row-items').find('.item-job').removeClass('active'); 812 $this.addClass('active'); 813 814 self.initSlick($('#job-details-wrapper').find('.slick-carousel')); 815 816 $('#job-details-wrapper').find('.btn-apply-job-email:not(.filled), .btn-apply-job-call:not(.filled)').magnificPopup({ 817 mainClass: 'apus-mfp-zoom-in apus-mfp-zoom-call-in', 818 type:'inline', 819 midClick: true 820 }); 821 822 $('#job-details-wrapper').find('.btn-apply-job-email:not(.filled)').magnificPopup({ 823 mainClass: 'apus-mfp-zoom-in', 824 type:'inline', 825 midClick: true 826 }); 827 828 if ( wp_job_board_pro_opts.recaptcha_enable ) { 829 setTimeout(function(){ 830 var recaptchas = document.getElementsByClassName("ga-recaptcha"); 831 for(var i=0; i<recaptchas.length; i++) { 832 var recaptcha = recaptchas[i]; 833 var sitekey = recaptcha.dataset.sitekey; 834 835 grecaptcha.render(recaptcha, { 836 'sitekey' : sitekey 837 }); 838 } 839 }, 1000); 840 } 841 } 842 843 $('#job-details-wrapper').removeClass('loading'); 844 845 self.showJobAjax = false; 846 } 847 }); 848 }, 849 jobsGetPage: function(pageUrl, isBackButton){ 850 var self = this; 851 if (self.filterAjax) { return false; } 852 853 self.jobsSetCurrentUrl(); 854 855 if (pageUrl) { 856 // Show 'loader' overlay 857 self.jobsShowLoader(); 858 859 // Make sure the URL has a trailing-slash before query args (301 redirect fix) 860 pageUrl = pageUrl.replace(/\/?(\?|#|$)/, '/$1'); 861 862 if (!isBackButton) { 863 self.setPushState(pageUrl); 864 } 865 866 self.filterAjax = $.ajax({ 867 url: pageUrl, 868 data: { 869 load_type: 'full' 870 }, 871 dataType: 'html', 872 cache: false, 873 headers: {'cache-control': 'no-cache'}, 874 875 method: 'POST', // Note: Using "POST" method for the Ajax request to avoid "load_type" query-string in pagination links 876 877 error: function(XMLHttpRequest, textStatus, errorThrown) { 878 console.log('Apus: AJAX error - jobsGetPage() - ' + errorThrown); 879 880 // Hide 'loader' overlay (after scroll animation) 881 self.jobsHideLoader(); 882 883 self.filterAjax = false;
884 }, 885 success: function(response) { 886 // Update jobs content 887 self.jobsUpdateContent(response); 888 889 self.filterAjax = false; 890 } 891 }); 892 893 } 894 }, 895 jobsHideLoader: function(){ 896 $('body').find('.main-items-wrapper').removeClass('loading'); 897 }, 898 jobsShowLoader: function(){ 899 $('body').find('.main-items-wrapper').addClass('loading'); 900 }, 901 setPushState: function(pageUrl) { 902 window.history.pushState({apusShop: true}, '', pageUrl); 903 }, 904 jobsSetCurrentUrl: function() { 905 var self = this; 906 907 // Set current page URL 908 self.searchAndTagsResetURL = window.location.href; 909 }, 910 /** 911 * Properties: Update jobs content with AJAX HTML 912 */ 913 jobsUpdateContent: function(ajaxHTML) { 914 var self = this, 915 $ajaxHTML = $('<div>' + ajaxHTML + '</div>'); 916 917 var $jobs = $ajaxHTML.find('.main-items-wrapper'), 918 $pagination = $ajaxHTML.find('.main-pagination-wrapper'); 919 920 // Replace jobs 921 if ($jobs.length) { 922 $('.main-items-wrapper').replaceWith($jobs); 923 } 924 // Replace pagination 925 if ($pagination.length) { 926 $('.main-pagination-wrapper').replaceWith($pagination); 927 } 928 // Load images (init Unveil) 929 self.layzyLoadImage(); 930 // pagination 931 if ( $('.ajax-pagination').length ) { 932 self.infloadScroll = false; 933 self.ajaxPaginationLoad(); 934 } 935 936 if ( $.isFunction( $.fn.select2 ) && typeof wp_job_board_pro_select2_opts !== 'undefined' ) { 937 var select2_args = wp_job_board_pro_select2_opts; 938 select2_args['allowClear'] = false; 939 select2_args['minimumResultsForSearch'] = 10; 940 select2_args['language'] = { 941 noResults: function (params) { 942 return select2_args['language_result']; 943 } 944 } 945 select2_args['minimumResultsForSearch'] = 10; 946 select2_args['width'] = 'auto'; 947 948 $('select.orderby').select2( select2_args ); 949 $( 'select[name=jobs_ppp]' ).select2( select2_args ); 950 $( 'select[name=candidates_ppp]' ).select2( select2_args ); 951 $( 'select[name=employers_ppp]' ).select2( select2_args ); 952 } 953 954 $('.main-items-wrapper').find('.btn-apply-job-email:not(.filled), .btn-apply-job-call:not(.filled)').magnificPopup({ 955 mainClass: 'apus-mfp-zoom-in apus-mfp-zoom-call-in', 956 type:'inline', 957 midClick: true 958 }); 959 960 $('.main-items-wrapper').find('.btn-apply-job-email:not(.filled)').magnificPopup({ 961 mainClass: 'apus-mfp-zoom-in', 962 type:'inline', 963 midClick: true 964 }); 965 966 if ( wp_job_board_pro_opts.recaptcha_enable ) { 967 968 setTimeout(function(){ 969 var recaptchas = document.getElementsByClassName("ga-recaptcha"); 970 for(var i=0; i<recaptchas.length; i++) { 971 var recaptcha = recaptchas[i]; 972 var sitekey = recaptcha.dataset.sitekey; 973 974 grecaptcha.render(recaptcha, { 975 'sitekey' : sitekey 976 }); 977 } 978 }, 1000); 979 } 980 981 self.initSlick($('.main-items-wrapper').find('.slick-carousel')); 982 983 self.updateMakerCards(); 984 setTimeout(function() { 985 // Hide 'loader' 986 self.jobsHideLoader(); 987 }, 100); 988 }, 989 990 /** 991 * Shop: Initialize infinite load 992 */ 993 ajaxPaginationLoad: function() { 994 var self = this,
995 $infloadControls = $('body').find('.ajax-pagination'), 996 nextPageUrl; 997 998 self.infloadScroll = ($infloadControls.hasClass('infinite-action')) ? true : false; 999 1000 if (self.infloadScroll) { 1001 self.infscrollLock = false; 1002 1003 var pxFromWindowBottomToBottom, 1004 pxFromMenuToBottom = Math.round($(document).height() - $infloadControls.offset().top); 1005 //bufferPx = 0; 1006 1007 /* Bind: Window resize event to re-calculate the 'pxFromMenuToBottom' value (so the items load at the correct scroll-position) */ 1008 var to = null; 1009 $(window).resize(function() { 1010 if (to) { clearTimeout(to); } 1011 to = setTimeout(function() { 1012 var $infloadControls = $('.ajax-pagination'); // Note: Don't cache, element is dynamic 1013 pxFromMenuToBottom = Math.round($(document).height() - $infloadControls.offset().top); 1014 }, 100); 1015 }); 1016 1017 $(window).scroll(function(){ 1018 if (self.infscrollLock) { 1019 return; 1020 } 1021 1022 pxFromWindowBottomToBottom = 0 + $(document).height() - ($(window).scrollTop()) - $(window).height(); 1023 1024 // If distance remaining in the scroll (including buffer) is less than the pagination element to bottom: 1025 if (pxFromWindowBottomToBottom < pxFromMenuToBottom) { 1026 self.ajaxPaginationGet(); 1027 } 1028 }); 1029 } else { 1030 var $productsWrap = $('body'); 1031 /* Bind: "Load" button */ 1032 $productsWrap.on('click', '.main-pagination-wrapper .apus-loadmore-btn', function(e) { 1033 e.preventDefault(); 1034 self.ajaxPaginationGet(); 1035 }); 1036 1037 } 1038 1039 if (self.infloadScroll) { 1040 $(window).trigger('scroll'); // Trigger scroll in case the pagination element (+buffer) is above the window bottom 1041 } 1042 }, 1043 /** 1044 * Shop: AJAX load next page 1045 */ 1046 ajaxPaginationGet: function() { 1047 var self = this; 1048 1049 if (self.filterAjax) return false; 1050 1051 // Get elements (these can be replaced with AJAX, don't pre-cache) 1052 var $nextPageLink = $('.apus-pagination-next-link').find('a'), 1053 $infloadControls = $('.ajax-pagination'), 1054 nextPageUrl = $nextPageLink.attr('href'); 1055 1056 if (nextPageUrl) { 1057 // Show 'loader' 1058 $infloadControls.addClass('apus-loader'); 1059 1060 // self.setPushState(nextPageUrl); 1061 1062 self.filterAjax = $.ajax({ 1063 url: nextPageUrl, 1064 data: { 1065 load_type: 'items' 1066 }, 1067 dataType: 'html', 1068 cache: false, 1069 headers: {'cache-control': 'no-cache'}, 1070 method: 'GET', 1071 error: function(XMLHttpRequest, textStatus, errorThrown) { 1072 console.log('APUS: AJAX error - ajaxPaginationGet() - ' + errorThrown); 1073 }, 1074 complete: function() { 1075 // Hide 'loader' 1076 $infloadControls.removeClass('apus-loader'); 1077 }, 1078 success: function(response) { 1079 var $response = $('<div>' + response + '</div>'), // Wrap the returned HTML string in a dummy 'div' element we can get the elements 1080 $gridItemElement = $('.items-wrapper', $response).html(), 1081 $resultCount = $('.results-count .last', $response).html(),
1082 $display_mode = $('.main-items-wrapper').data('display_mode'); 1083 1084 1085 // Append the new elements 1086 1087 $('.main-items-wrapper .items-wrapper .row').append($gridItemElement); 1088 1089 1090 // Append results 1091 $('.main-items-wrapper .results-count .last').html($resultCount); 1092 1093 // Update Maps 1094 self.updateMakerCards(response); 1095 1096 // Load images (init Unveil) 1097 self.layzyLoadImage(); 1098 1099 // Get the 'next page' URL 1100 nextPageUrl = $response.find('.apus-pagination-next-link').children('a').attr('href'); 1101 1102 if (nextPageUrl) { 1103 $nextPageLink.attr('href', nextPageUrl); 1104 } else { 1105 $('.main-items-wrapper').addClass('all-jobs-loaded'); 1106 1107 if (self.infloadScroll) { 1108 self.infscrollLock = true; 1109 } 1110 $infloadControls.find('.apus-loadmore-btn').addClass('hidden'); 1111 $nextPageLink.removeAttr('href'); 1112 } 1113 1114 self.filterAjax = false; 1115 1116 if (self.infloadScroll) { 1117 $(window).trigger('scroll'); // Trigger 'scroll' in case the pagination element (+buffer) is still above the window bottom 1118 } 1119 } 1120 }); 1121 } else { 1122 if (self.infloadScroll) { 1123 self.infscrollLock = true; // "Lock" scroll (no more products/pages) 1124 } 1125 } 1126 }, 1127 addCommas: function(str) { 1128 var parts = (str + "").split("."), 1129 main = parts[0], 1130 len = main.length, 1131 output = "", 1132 first = main.charAt(0), 1133 i; 1134 1135 if (first === '-') { 1136 main = main.slice(1); 1137 len = main.length; 1138 } else { 1139 first = ""; 1140 } 1141 i = len - 1; 1142 while(i >= 0) { 1143 output = main.charAt(i) + output; 1144 if ((len - i) % 3 === 0 && i > 0) { 1145 output = wp_job_board_pro_opts.money_thousands_separator + output; 1146 } 1147 --i; 1148 } 1149 // put sign back 1150 output = first + output; 1151 // put decimal part back 1152 if (parts.length > 1) { 1153 output += wp_job_board_pro_opts.money_dec_point + parts[1]; 1154 } 1155 return output; 1156 } 1157 }); 1158 1159 $.apusThemeExtensions.job = $.apusThemeCore.job_init; 1160 1161 1162})(jQuery);
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.