(function($) { "use strict"; var __cache = []; $.extend($.apusThemeCore, { /** * Initialize scripts */ job_init: function() { var self = this; self.select2Init(); self.searchAjaxInit(); self.listingDetail(); self.filterListingFnc(); self.listingBtnFilter(); self.portfolio(); self.sendPrivateMessage(); self.changeHeightJobsDetail(); setTimeout(function(){ self.changePaddingTopContent(); $(window).trigger('resize'); }, 100); self.checkSidebar(); $(window).resize(function(){ setTimeout(function(){ self.changePaddingTopContent(); self.changeHeightJobsDetail(); }, 50); }); self.userLoginRegister(); self.dashboardChart(); if ( $('.jobs-listing-wrapper.main-items-wrapper, .employers-listing-wrapper.main-items-wrapper, .candidates-listing-wrapper.main-items-wrapper').length ) { $(document).on('change', 'form.filter-listing-form-wrapper input, form.filter-listing-form-wrapper select', function (e) { var form = $(this).closest('form.filter-listing-form-wrapper'); if ( $(this).attr('name') == 'filter-salary-type' ) { form.find('input[name=filter-salary-from]').val(''); form.find('input[name=filter-salary-to]').val(''); } setTimeout(function(){ form.trigger('submit'); }, 200); }); $(document).on('submit', 'form.filter-listing-form-wrapper', function (e) { e.preventDefault(); var url = $(this).attr('action'); var formData = $(this).find(":input").filter(function(index, element) { return $(element).val() != ''; }).serialize(); if( url.indexOf('?') != -1 ) { url = url + '&' + formData; } else{ url = url + '?' + formData; } self.jobsGetPage( url ); return false; }); } // Sort Action $(document).on('change', 'form.jobs-ordering select.orderby', function(e) { e.preventDefault(); $('form.jobs-ordering').trigger('submit'); }); $(document).on('submit', 'form.jobs-ordering', function (e) { var url = $(this).attr('action'); var formData = $(this).find(":input").filter(function(index, element) { return $(element).val() != ''; }).serialize(); if( url.indexOf('?') != -1 ) { url = url + '&' + formData; } else{ url = url + '?' + formData; } self.jobsGetPage( url ); return false; }); // ajax pagination if ( $('.ajax-pagination').length ) { self.ajaxPaginationLoad(); } $(document).on('click', '.advance-search-btn', function(e) { e.preventDefault(); $(this).closest('.filter-listing-form').find('.advance-search-wrapper').slideToggle('fast', 'swing'); }); // message notification $('.message-notification').on('click', function (e) { e.stopPropagation(); $('.notifications-wrapper').toggleClass('active'); $('.message-top .notifications-wrapper.active').perfectScrollbar(); }); $('body').on('click', function() { if ($('.notifications-wrapper').hasClass('active')) { $('.notifications-wrapper').removeClass('active'); } }); $('.notifications-wrapper').on('click', function(e) { e.stopPropagation(); }); $('body').on('click', '.close-filter-sidebar', function(){ var parent = $(this).closest('.inner-left'); parent.find('.filter-sidebar').removeClass('active'); parent.find('.over-dark').removeClass('active'); }); }, checkSidebar: function(){ $('.sidebar-job > .widget').each(function(){ var $this = $(this); if( $this.find('> *').length > 0 ){ $this.addClass('has-content'); } }); }, dashboardChart: function(){ var self = this; // candidate chart if ( $('#dashboard_chart_wrapper').length ) { var $this = $('#dashboard_chart_wrapper'); var labels = $this.data('labels'); var values = $this.data('values'); var label = $this.data('label'); var chart_type = $this.data('chart_type'); var bg_color = $this.data('bg_color'); var border_color = $this.data('border_color'); var ctx = $this.get(0).getContext("2d"); var data = { labels: labels, datasets: [ { label: label, backgroundColor: bg_color, borderColor: border_color, borderWidth: 1, data: values }, ] }; var options = { //Boolean - Whether the scale should start at zero, or an order of magnitude down from the lowest value scaleBeginAtZero : true, //Boolean - Whether grid lines are shown across the chart scaleShowGridLines : false, //String - Colour of the grid lines scaleGridLineColor : "rgba(0,0,0,.05)", //Number - Width of the grid lines scaleGridLineWidth : 1, //Boolean - Whether to show horizontal lines (except X axis) scaleShowHorizontalLines: true, //Boolean - Whether to show vertical lines (except Y axis) scaleShowVerticalLines: true, //Boolean - If there is a stroke on each bar barShowStroke : false, //Number - Pixel width of the bar stroke barStrokeWidth : 2, //Number - Spacing between each of the X value sets barValueSpacing : 5, //Number - Spacing between data sets within X values barDatasetSpacing : 1, legend: { display: false }, tooltips: { enabled: true, mode: 'x-axis', cornerRadius: 4 }, } var myBarChart = new Chart(ctx, { type: chart_type, data: data, options: options }); } // scrollbar notifications $('.dashboard-notifications-wrapper').perfectScrollbar(); // employer chart var self = this; var $this = $('#dashboard_job_chart_wrapper'); if( $this.length <= 0 ) { return; } // select2 if ( $.isFunction( $.fn.select2 ) && typeof wp_job_board_pro_select2_opts !== 'undefined' ) { var select2_args = wp_job_board_pro_select2_opts; select2_args['allowClear'] = false; select2_args['minimumResultsForSearch'] = 10; select2_args['language'] = { noResults: function(){ return wp_job_board_pro_select2_opts.language_result; } }; select2_args['width'] = '100%'; $('.stats-graph-search-form select').select2( select2_args ); } var job_id = $this.data('job_id'); var nb_days = $this.data('nb_days'); self.dashboardChartAjaxInit($this, job_id, nb_days); $('form.stats-graph-search-form select[name="job_id"]').on('change', function(){ $('form.stats-graph-search-form').trigger('submit'); }); $('form.stats-graph-search-form select[name="nb_days"]').on('change', function(){ $('form.stats-graph-search-form').trigger('submit'); }); $('form.stats-graph-search-form').on('submit', function(e){ e.preventDefault(); var job_id = $('form.stats-graph-search-form select[name="job_id"]').val(); var nb_days = $('form.stats-graph-search-form select[name="nb_days"]').val(); self.dashboardChartAjaxInit($this, job_id, nb_days); return false; }); }, dashboardChartAjaxInit: function($this, job_id, nb_days) { var self = this; if( $this.length <= 0 ) { return; } if ( $this.hasClass('loading') ) { return; } $this.addClass('loading'); var ajaxurl = hirestick_job_opts.ajaxurl; if ( typeof wp_job_board_pro_opts.ajaxurl_endpoint !== 'undefined' ) { ajaxurl = wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'hirestick_get_job_chart' ); } $.ajax({ url: ajaxurl, type:'POST', dataType: 'json', data: { action: 'hirestick_get_job_chart', job_id: job_id, nb_days: nb_days, nonce: $this.data('nonce'), } }).done(function(response) { if (response.status == 'error') { $this.remove(); } else { var ctx = $this.get(0).getContext("2d"); var data = { labels: response.stats_labels, datasets: [ { label: response.stats_view, backgroundColor: response.bg_color, borderColor: response.border_color, borderWidth: 1, data: response.stats_values }, ] }; var options = { //Boolean - Whether the scale should start at zero, or an order of magnitude down from the lowest value scaleBeginAtZero : true, //Boolean - Whether grid lines are shown across the chart scaleShowGridLines : false, //String - Colour of the grid lines scaleGridLineColor : "rgba(0,0,0,.05)", //Number - Width of the grid lines scaleGridLineWidth : 1, //Boolean - Whether to show horizontal lines (except X axis) scaleShowHorizontalLines: true, //Boolean - Whether to show vertical lines (except Y axis) scaleShowVerticalLines: true, //Boolean - If there is a stroke on each bar barShowStroke : false, //Number - Pixel width of the bar stroke barStrokeWidth : 2, //Number - Spacing between each of the X value sets barValueSpacing : 5, //Number - Spacing between data sets within X values barDatasetSpacing : 1, legend: { display: false }, tooltips: { enabled: true, mode: 'x-axis', cornerRadius: 4 }, } if (typeof self.myBarChart !== 'undefined') { self.myBarChart.destroy(); } self.myBarChart = new Chart(ctx, { type: response.chart_type, data: data, options: options }); } $this.removeClass('loading'); }); }, portfolio: function() { $('.portfolio').each(function(){ var $this = $(this); $('.view-more-gallery', $this).on('click', function(e){ $('.item', $this).removeClass('hidden'); $('.popup-image-gallery').removeClass('view-more-image'); $(this).addClass('hidden'); $(document).trigger('resize'); }); }); }, sendPrivateMessage: function() { var self = this; $('.send-private-message-btn').magnificPopup({ mainClass: 'apus-mfp-zoom-in login-popup', type:'inline', midClick: true }); }, select2Init: function() { // select2 var self = this; if ( $.isFunction( $.fn.select2 ) && typeof wp_job_board_pro_select2_opts !== 'undefined' ) { var select2_args = wp_job_board_pro_select2_opts; select2_args['allowClear'] = true; select2_args['minimumResultsForSearch'] = 10; select2_args['language'] = { noResults: function (params) { return select2_args['language_result']; } } $('.select-taxonomy-search' ).each(function(){ self.select2SearchInit($(this), select2_args, false); }); $('.select-field-region-search' ).each(function(){ self.select2SearchInit( $(this), select2_args, true ); }); $('body').on('change', 'select.select-field-region-search', function(){ var val = $(this).val(); var next = $(this).data('next'); var main_select = 'select.select-field-region-search' + next; if ( $(main_select).length > 0 ) { $(main_select).val(null).trigger("change"); } }); $('.filter-listing-form select:not(.select-taxonomy-search, .select-field-region-search)').select2( select2_args ); select2_args['allowClear'] = false; $( 'select[name=jobs_ppp]' ).select2( select2_args ); $( 'select[name=candidates_ppp]' ).select2( select2_args ); $( 'select[name=employers_ppp]' ).select2( select2_args ); // filter $('select[name=email_frequency]').select2( select2_args ); } }, select2SearchInit: function($element, select2_args, region) { $element.select2({ allowClear: true, width: '100%', dir: select2_args['dir'], language: { noResults: function (params) { return select2_args['language_result']; }, inputTooShort: function () { return select2_args['formatInputTooShort_text']; } }, minimumInputLength: 2, ajax: { url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'wpjb_search_terms' ), dataType: 'json', delay: 250, data: function (params) { if ( region ) { var parent_id = 0; var prev = $element.data('prev'); var prev_select = $('.select-field-region-search' + prev); if ( prev_select.length ) { parent_id = prev_select.val(); if ( !parent_id ) { parent_id = 'lost-parent'; } } var query = { search: params.term, page: params.page || 1, taxonomy: $element.data('taxonomy'), parent: parent_id, prev: prev } } else { var query = { search: params.term, page: params.page || 1, taxonomy: $element.data('taxonomy'), parent: '', prev: '', } } // Query parameters will be ?search=[term]&type=public return query; }, processResults: function (data, params) { params.page = params.page || 1; return { results: $.map(data.results, function (item) { return { text: item.name, id: item.id } }), pagination: { more: params.page < data.pages } }; }, transport: function(params, success, failure) { //retrieve the cached key or default to _ALL_ var __cachekey = params.data.search + '-' + params.data.taxonomy + '-' + params.data.page + '-' + params.data.parent + params.data.prev; if ('undefined' !== typeof __cache[__cachekey]) { //display the cached results success(__cache[__cachekey]); return; /* noop */ } var $request = $.ajax(params); $request.then(function(data) { //store data in cache __cache[__cachekey] = data; //display the results success(__cache[__cachekey]); }); $request.fail(failure); return $request; }, cache: true } }); }, changeHeightJobsDetail: function() { var heightdetail = 0; if ( $('#job-details-wrapper .top-detail-job').length ){ var heightdetail = $('#job-details-wrapper .top-detail-job').outerHeight(); } $('#job-details-wrapper .job-content-area').css({ 'height': 'calc( 100vh - ' + ( heightdetail + 20 ) + 'px' }); }, changePaddingTopContent: function() { var admin_bar_h = 0; if ( $('#wpadminbar').length ){ var admin_bar_h = $('#wpadminbar').outerHeight(); } if ($(window).width() >= 1200) { var header_h = $('#apus-header').outerHeight(); var header_top_h = header_h; var header_main_content_h = header_h - admin_bar_h; $('body.page-template-page-dashboard #apus-main-content').css({ 'padding-top': header_h }); if ( $('.layout-type-fullwidth .filter-sidebar').length ) { $('.layout-type-fullwidth .filter-sidebar').css({ 'top': header_h, 'height': 'calc( 100vh - ' + header_h + 'px )' }); $('#apus-main-content').css({ 'padding-top': header_main_content_h }); } } else { var header_h = $('#apus-header-mobile').outerHeight(); if ( $('#jobs-google-maps').is('.fix-map') ) { var header_top_h = header_h + admin_bar_h; var header_main_content_h = header_h - admin_bar_h; } else if ( $('.layout-type-fullwidth .filter-sidebar').length ) { if ($(window).width() >= 992) { var header_top_h = header_h + admin_bar_h; } else { var header_top_h = header_h - admin_bar_h; } $('.layout-type-fullwidth .filter-sidebar').css({ 'padding-top': header_top_h, 'height': 'calc( 100vh - ' + header_top_h + 'px )' }); $('#apus-main-content').css({ 'padding-top': header_top_h }); } $('body.page-template-page-dashboard #apus-main-content').css({ 'padding-top': header_h }); } if ($('#jobs-google-maps').is('.fix-map')) { $('#jobs-google-maps').css({ 'top': header_top_h, 'height': 'calc(100vh - ' + header_top_h+ 'px)' }); $('#apus-main-content').css({ 'padding-top': header_main_content_h }); } $('.offcanvas-filter-sidebar .filter-scroll, .layout-type-fullwidth .filter-sidebar').perfectScrollbar(); }, searchAjaxInit: function() { if ( $.isFunction( $.fn.typeahead ) ) { $('.apus-autocompleate-input').each(function(){ var $this = $(this); $this.typeahead({ 'hint': true, 'highlight': true, 'minLength': 2, 'limit': 10 }, { name: 'search', source: function (query, processSync, processAsync) { processSync([hirestick_job_opts.empty_msg]); $this.closest('.twitter-typeahead').addClass('loading'); var values = {}; $.each($this.closest('form').serializeArray(), function (i, field) { values[field.name] = field.value; }); return $.ajax({ url: wp_job_board_pro_opts.ajaxurl_endpoint.toString().replace( '%%endpoint%%', 'hirestick_autocomplete_search_jobs' ), type: 'GET', data: { 'search': query, 'data': values }, dataType: 'json', success: function (json) { $this.closest('.twitter-typeahead').removeClass('loading'); $this.closest('.has-suggestion').removeClass('active'); return processAsync(json); } }); }, templates: { empty : [ '
' ].join('\n'), suggestion: function(data) { return '\