You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
4.4 KiB
JavaScript
152 lines
4.4 KiB
JavaScript
/* global awsmJobsPublic */
|
|
|
|
'use strict';
|
|
|
|
jQuery(document).ready(function($) {
|
|
var awsmJobs = window.awsmJobs = window.awsmJobs || {};
|
|
|
|
// =============== Job Views ===============
|
|
var jobId = Number(awsmJobsPublic.job_id);
|
|
if (jobId && ! isNaN(jobId)) {
|
|
$.post(awsmJobsPublic.ajaxurl, {
|
|
action: 'awsm_view_count',
|
|
'awsm_job_id': jobId
|
|
});
|
|
}
|
|
|
|
// ========== Job Application Form ==========
|
|
var $applicationForm = $('.awsm-application-form');
|
|
|
|
awsmJobs.submitApplication = function($form, data) {
|
|
data = typeof data !== 'undefined' ? data : {};
|
|
var $submitBtn = $form.find('.awsm-application-submit-btn');
|
|
var $applicationMessage = $form.parents('.awsm-job-form-inner').find('.awsm-application-message');
|
|
var submitBtnText = $submitBtn.val();
|
|
var submitBtnResText = $submitBtn.data('responseText');
|
|
var successClass = 'awsm-success-message';
|
|
var errorClass = 'awsm-error-message';
|
|
|
|
// Hide all the form submission messages.
|
|
$('.awsm-application-message').hide();
|
|
|
|
var form = $form[0];
|
|
var fileCheck = true;
|
|
var $fileControl = $form.find('.awsm-form-file-control');
|
|
var maxSize = awsmJobsPublic.wp_max_upload_size;
|
|
if ($fileControl.length > 0) {
|
|
$fileControl.each(function() {
|
|
var $fileField = $(this);
|
|
var fileSize = (typeof $fileField.prop('files')[0] !== 'undefined' && $fileField.prop('files')[0]) ? $fileField.prop('files')[0].size : 0;
|
|
if (fileSize > maxSize) {
|
|
fileCheck = false;
|
|
}
|
|
});
|
|
}
|
|
if (fileCheck === false) {
|
|
$applicationMessage
|
|
.addClass(errorClass)
|
|
.html(awsmJobsPublic.i18n.form_error_msg.file_validation)
|
|
.fadeIn();
|
|
} else {
|
|
$applicationMessage
|
|
.removeClass(successClass + ' ' + errorClass)
|
|
.hide();
|
|
$submitBtn.prop('disabled', true).val(submitBtnResText).addClass('awsm-application-submit-btn-disabled');
|
|
|
|
var formData = new FormData(form);
|
|
if ('fields' in data && Array.isArray(data.fields)) {
|
|
$.each(data.fields, function(index, field) {
|
|
if ('name' in field && 'value' in field) {
|
|
formData.append(field.name, field.value);
|
|
}
|
|
});
|
|
}
|
|
|
|
$.ajax({
|
|
url: awsmJobsPublic.ajaxurl,
|
|
cache: false,
|
|
contentType: false,
|
|
processData: false,
|
|
data: formData,
|
|
dataType: 'json',
|
|
type: 'POST'
|
|
})
|
|
.done(function(response) {
|
|
if (response) {
|
|
var className = 'awsm-default-message';
|
|
var msg = '';
|
|
var msgArray = [];
|
|
if (response.error.length > 0) {
|
|
className = errorClass;
|
|
msgArray = response.error;
|
|
$form.trigger('awsmjobs_application_failed', [ response ]);
|
|
} else {
|
|
if (response.success.length > 0) {
|
|
$form[0].reset();
|
|
className = successClass;
|
|
msgArray = response.success;
|
|
$form.trigger('awsmjobs_application_submitted', [ response ]);
|
|
}
|
|
}
|
|
$(msgArray).each(function(index, value) {
|
|
msg += '<p>' + value + '</p>';
|
|
});
|
|
$applicationMessage
|
|
.addClass(className)
|
|
.html(msg)
|
|
.fadeIn();
|
|
}
|
|
})
|
|
.fail(function(xhr) {
|
|
$applicationMessage
|
|
.addClass(errorClass)
|
|
.html(awsmJobsPublic.i18n.form_error_msg.general)
|
|
.fadeIn();
|
|
// eslint-disable-next-line no-console
|
|
console.log(xhr);
|
|
})
|
|
.always(function() {
|
|
$submitBtn.prop('disabled', false).val(submitBtnText).removeClass('awsm-application-submit-btn-disabled');
|
|
});
|
|
}
|
|
};
|
|
|
|
var enableValidation = 'jquery_validation' in awsmJobsPublic.vendors && awsmJobsPublic.vendors.jquery_validation;
|
|
|
|
if (enableValidation) {
|
|
$applicationForm.each(function() {
|
|
var $form = $(this);
|
|
$form.validate({
|
|
errorElement: 'div',
|
|
errorClass: 'awsm-job-form-error',
|
|
errorPlacement: function(error, element) {
|
|
error.appendTo(element.parents('.awsm-job-form-group'));
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
$applicationForm.on('submit', function(event) {
|
|
event.preventDefault();
|
|
var $form = $(this);
|
|
var proceed = true;
|
|
if (enableValidation) {
|
|
proceed = $form.valid();
|
|
}
|
|
if (proceed) {
|
|
awsmJobs.submitApplication($form);
|
|
}
|
|
});
|
|
|
|
// Job Application Form - In-App Browsers support.
|
|
if ($('.awsm-application-form .awsm-form-file-control').length > 0) {
|
|
var userAgent = navigator.userAgent;
|
|
if (typeof userAgent !== 'undefined') {
|
|
var isFBAppBrowser = (userAgent.indexOf('FBAN') > -1) || (userAgent.indexOf('FBAV') > -1) || (userAgent.indexOf('Instagram') > -1);
|
|
if (isFBAppBrowser) {
|
|
$('.awsm-application-form .awsm-form-file-control').removeAttr('accept');
|
|
}
|
|
}
|
|
}
|
|
});
|