PageSourceSearch

https://arinternationalmanpower.com/wp-content/themes/superio/js/job.js?ver=20150330

js arinternationalmanpower.com collected 2026-10-06 22:52:05 UTC 50,166 bytes, 1,162 lines download raw bytes

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.