242 lines
9.0 KiB
JavaScript
242 lines
9.0 KiB
JavaScript
/*
|
|
* Document : be_forms_wizard.js
|
|
* Author : pixelcave
|
|
* Description: Custom JS code used in Form Wizard Page
|
|
*/
|
|
|
|
class BeFormWizard {
|
|
/*
|
|
* Init Wizard defaults
|
|
*
|
|
*/
|
|
static initWizardDefaults() {
|
|
jQuery.fn.bootstrapWizard.defaults.tabClass = 'nav nav-tabs';
|
|
jQuery.fn.bootstrapWizard.defaults.nextSelector = '[data-wizard="next"]';
|
|
jQuery.fn.bootstrapWizard.defaults.previousSelector = '[data-wizard="prev"]';
|
|
jQuery.fn.bootstrapWizard.defaults.firstSelector = '[data-wizard="first"]';
|
|
jQuery.fn.bootstrapWizard.defaults.lastSelector = '[data-wizard="lsat"]';
|
|
jQuery.fn.bootstrapWizard.defaults.finishSelector = '[data-wizard="finish"]';
|
|
jQuery.fn.bootstrapWizard.defaults.backSelector = '[data-wizard="back"]';
|
|
}
|
|
|
|
/*
|
|
* Init simple wizard, for more examples you can check out https://github.com/VinceG/twitter-bootstrap-wizard
|
|
*
|
|
*/
|
|
static initWizardSimple() {
|
|
jQuery('.js-wizard-simple').bootstrapWizard({
|
|
onTabShow: (tab, navigation, index) => {
|
|
let percent = ((index + 1) / navigation.find('li').length) * 100;
|
|
|
|
// Get progress bar
|
|
let progress = navigation.parents('.block').find('[data-wizard="progress"] > .progress-bar');
|
|
|
|
// Update progress bar if there is one
|
|
if (progress.length) {
|
|
progress.css({ width: percent + 1 + '%' });
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
/*
|
|
* Init wizards with validation, for more examples you can check out
|
|
* https://github.com/VinceG/twitter-bootstrap-wizard and https://github.com/jzaefferer/jquery-validation
|
|
*
|
|
*/
|
|
static initWizardValidation() {
|
|
// Get forms
|
|
let formClassic = jQuery('.js-wizard-validation-classic-form');
|
|
let formMaterial = jQuery('.js-wizard-validation-material-form');
|
|
|
|
// Prevent forms from submitting on enter key press
|
|
formClassic.add(formMaterial).on('keyup keypress', e => {
|
|
let code = e.keyCode || e.which;
|
|
|
|
if (code === 13) {
|
|
e.preventDefault();
|
|
return false;
|
|
}
|
|
});
|
|
|
|
// Init form validation on classic wizard form
|
|
let validatorClassic = formClassic.validate({
|
|
errorClass: 'invalid-feedback animated fadeInDown',
|
|
errorElement: 'div',
|
|
errorPlacement: (error, e) => {
|
|
jQuery(e).parents('.form-group').append(error);
|
|
},
|
|
highlight: e => {
|
|
jQuery(e).closest('.form-group').removeClass('is-invalid').addClass('is-invalid');
|
|
},
|
|
success: e => {
|
|
jQuery(e).closest('.form-group').removeClass('is-invalid');
|
|
jQuery(e).remove();
|
|
},
|
|
rules: {
|
|
'wizard-validation-classic-firstname': {
|
|
required: true,
|
|
minlength: 2
|
|
},
|
|
'wizard-validation-classic-lastname': {
|
|
required: true,
|
|
minlength: 2
|
|
},
|
|
'wizard-validation-classic-email': {
|
|
required: true,
|
|
email: true
|
|
},
|
|
'wizard-validation-classic-bio': {
|
|
required: true,
|
|
minlength: 5
|
|
},
|
|
'wizard-validation-classic-location': {
|
|
required: true
|
|
},
|
|
'wizard-validation-classic-skills': {
|
|
required: true
|
|
},
|
|
'wizard-validation-classic-terms': {
|
|
required: true
|
|
}
|
|
},
|
|
messages: {
|
|
'wizard-validation-classic-firstname': {
|
|
required: 'Please enter a firstname',
|
|
minlength: 'Your firtname must consist of at least 2 characters'
|
|
},
|
|
'wizard-validation-classic-lastname': {
|
|
required: 'Please enter a lastname',
|
|
minlength: 'Your lastname must consist of at least 2 characters'
|
|
},
|
|
'wizard-validation-classic-email': 'Please enter a valid email address',
|
|
'wizard-validation-classic-bio': 'Let us know a few thing about yourself',
|
|
'wizard-validation-classic-skills': 'Please select a skill!',
|
|
'wizard-validation-classic-terms': 'You must agree to the service terms!'
|
|
}
|
|
});
|
|
|
|
// Init form validation on material wizard form
|
|
let validatorMaterial = formMaterial.validate({
|
|
errorClass: 'invalid-feedback animated fadeInDown',
|
|
errorElement: 'div',
|
|
errorPlacement: (error, e) => {
|
|
jQuery(e).parents('.form-group').append(error);
|
|
},
|
|
highlight: e => {
|
|
jQuery(e).closest('.form-group').removeClass('is-invalid').addClass('is-invalid');
|
|
},
|
|
success: e => {
|
|
jQuery(e).closest('.form-group').removeClass('is-invalid');
|
|
jQuery(e).remove();
|
|
},
|
|
rules: {
|
|
'wizard-validation-material-firstname': {
|
|
required: true,
|
|
minlength: 2
|
|
},
|
|
'wizard-validation-material-lastname': {
|
|
required: true,
|
|
minlength: 2
|
|
},
|
|
'wizard-validation-material-email': {
|
|
required: true,
|
|
email: true
|
|
},
|
|
'wizard-validation-material-bio': {
|
|
required: true,
|
|
minlength: 5
|
|
},
|
|
'wizard-validation-material-location': {
|
|
required: true
|
|
},
|
|
'wizard-validation-material-skills': {
|
|
required: true
|
|
},
|
|
'wizard-validation-material-terms': {
|
|
required: true
|
|
}
|
|
},
|
|
messages: {
|
|
'wizard-validation-material-firstname': {
|
|
required: 'Please enter a firstname',
|
|
minlength: 'Your firtname must consist of at least 2 characters'
|
|
},
|
|
'wizard-validation-material-lastname': {
|
|
required: 'Please enter a lastname',
|
|
minlength: 'Your lastname must consist of at least 2 characters'
|
|
},
|
|
'wizard-validation-material-email': 'Please enter a valid email address',
|
|
'wizard-validation-material-bio': 'Let us know a few thing about yourself',
|
|
'wizard-validation-material-skills': 'Please select a skill!',
|
|
'wizard-validation-material-terms': 'You must agree to the service terms!'
|
|
}
|
|
});
|
|
|
|
// Init classic wizard with validation
|
|
jQuery('.js-wizard-validation-classic').bootstrapWizard({
|
|
tabClass: '',
|
|
onTabShow: (tab, navigation, index) => {
|
|
let percent = ((index + 1) / navigation.find('li').length) * 100;
|
|
|
|
// Get progress bar
|
|
let progress = navigation.parents('.block').find('[data-wizard="progress"] > .progress-bar');
|
|
|
|
// Update progress bar if there is one
|
|
if (progress.length) {
|
|
progress.css({ width: percent + 1 + '%' });
|
|
}
|
|
},
|
|
onNext: (tab, navigation, index) => {
|
|
if(!formClassic.valid()) {
|
|
validatorClassic.focusInvalid();
|
|
return false;
|
|
}
|
|
},
|
|
onTabClick: (tab, navigation, index) => {
|
|
jQuery('a', navigation).blur();
|
|
return false;
|
|
}
|
|
});
|
|
|
|
// Init wizard with validation
|
|
jQuery('.js-wizard-validation-material').bootstrapWizard({
|
|
tabClass: '',
|
|
onTabShow: (tab, navigation, index) => {
|
|
let percent = ((index + 1) / navigation.find('li').length) * 100;
|
|
|
|
// Get progress bar
|
|
let progress = navigation.parents('.block').find('[data-wizard="progress"] > .progress-bar');
|
|
|
|
// Update progress bar if there is one
|
|
if (progress.length) {
|
|
progress.css({ width: percent + 1 + '%' });
|
|
}
|
|
},
|
|
onNext: (tab, navigation, index) => {
|
|
if(!formMaterial.valid()) {
|
|
validatorMaterial.focusInvalid();
|
|
return false;
|
|
}
|
|
},
|
|
onTabClick: (tab, navigation, index) => {
|
|
jQuery('a', navigation).blur();
|
|
return false;
|
|
}
|
|
});
|
|
}
|
|
|
|
/*
|
|
* Init functionality
|
|
*
|
|
*/
|
|
static init() {
|
|
this.initWizardDefaults();
|
|
this.initWizardSimple();
|
|
this.initWizardValidation();
|
|
}
|
|
}
|
|
|
|
// Initialize when page loads
|
|
jQuery(() => { BeFormWizard.init(); });
|