MINI Sh3ll
/* ------------------------------------------------------------------------------
*
* # Steps wizard
*
* Demo JS code for form_wizard.html page
*
* ---------------------------------------------------------------------------- */
// Setup module
// ------------------------------
var FormWizard = function() {
//
// Setup module components
//
// Wizard
var _componentWizard = function() {
if (!$().steps) {
console.warn('Warning - steps.min.js is not loaded.');
return;
}
// Basic wizard setup
$('.steps-basic').steps({
headerTag: 'h6',
bodyTag: 'fieldset',
transitionEffect: 'fade',
titleTemplate: '<span class="number">#index#</span> #title#',
labels: {
previous: '<i class="icon-arrow-left13 mr-2" /> Previous',
next: 'Next <i class="icon-arrow-right14 ml-2" />',
finish: 'Submit form <i class="icon-arrow-right14 ml-2" />'
},
onFinished: function (event, currentIndex) {
alert('Form submitted.');
}
});
// Async content loading
$('.steps-async').steps({
headerTag: 'h6',
bodyTag: 'fieldset',
transitionEffect: 'fade',
titleTemplate: '<span class="number">#index#</span> #title#',
loadingTemplate: '<div class="card-body text-center"><i class="icon-spinner2 spinner mr-2"></i> #text#</div>',
labels: {
previous: '<i class="icon-arrow-left13 mr-2" /> Previous',
next: 'Next <i class="icon-arrow-right14 ml-2" />',
finish: 'Submit form <i class="icon-arrow-right14 ml-2" />'
},
onContentLoaded: function (event, currentIndex) {
$(this).find('.card-body').addClass('hide');
// Re-initialize components
_componentSelect2();
_componentUniform();
},
onFinished: function (event, currentIndex) {
alert('Form submitted.');
}
});
// Saving wizard state
$('.steps-state-saving').steps({
headerTag: 'h6',
bodyTag: 'fieldset',
titleTemplate: '<span class="number">#index#</span> #title#',
labels: {
previous: '<i class="icon-arrow-left13 mr-2" /> Previous',
next: 'Next <i class="icon-arrow-right14 ml-2" />',
finish: 'Submit form <i class="icon-arrow-right14 ml-2" />'
},
transitionEffect: 'fade',
saveState: true,
autoFocus: true,
onFinished: function (event, currentIndex) {
alert('Form submitted.');
}
});
// Specify custom starting step
$('.steps-starting-step').steps({
headerTag: 'h6',
bodyTag: 'fieldset',
titleTemplate: '<span class="number">#index#</span> #title#',
labels: {
previous: '<i class="icon-arrow-left13 mr-2" /> Previous',
next: 'Next <i class="icon-arrow-right14 ml-2" />',
finish: 'Submit form <i class="icon-arrow-right14 ml-2" />'
},
transitionEffect: 'fade',
startIndex: 2,
autoFocus: true,
onFinished: function (event, currentIndex) {
alert('Form submitted.');
}
});
// Enable all steps and make them clickable
$('.steps-enable-all').steps({
headerTag: 'h6',
bodyTag: 'fieldset',
transitionEffect: 'fade',
enableAllSteps: true,
titleTemplate: '<span class="number">#index#</span> #title#',
labels: {
previous: '<i class="icon-arrow-left13 mr-2" /> Previous',
next: 'Next <i class="icon-arrow-right14 ml-2" />',
finish: 'Submit form <i class="icon-arrow-right14 ml-2" />'
},
onFinished: function (event, currentIndex) {
alert('Form submitted.');
}
});
//
// Wizard with validation
//
// Stop function if validation is missing
if (!$().validate) {
console.warn('Warning - validate.min.js is not loaded.');
return;
}
// Show form
var form = $('.steps-validation').show();
// Initialize wizard
$('.steps-validation').steps({
headerTag: 'h6',
bodyTag: 'fieldset',
titleTemplate: '<span class="number">#index#</span> #title#',
labels: {
previous: '<i class="icon-arrow-left13 mr-2" /> Previous',
next: 'Next <i class="icon-arrow-right14 ml-2" />',
finish: 'Submit form <i class="icon-arrow-right14 ml-2" />'
},
transitionEffect: 'fade',
autoFocus: true,
onStepChanging: function (event, currentIndex, newIndex) {
// Allways allow previous action even if the current form is not valid!
if (currentIndex > newIndex) {
return true;
}
// Needed in some cases if the user went back (clean up)
if (currentIndex < newIndex) {
// To remove error styles
form.find('.body:eq(' + newIndex + ') label.error').remove();
form.find('.body:eq(' + newIndex + ') .error').removeClass('error');
}
form.validate().settings.ignore = ':disabled,:hidden';
return form.valid();
},
onFinishing: function (event, currentIndex) {
form.validate().settings.ignore = ':disabled';
return form.valid();
},
onFinished: function (event, currentIndex) {
alert('Submitted!');
}
});
// Initialize validation
$('.steps-validation').validate({
ignore: 'input[type=hidden], .select2-search__field', // ignore hidden fields
errorClass: 'validation-invalid-label',
highlight: function(element, errorClass) {
$(element).removeClass(errorClass);
},
unhighlight: function(element, errorClass) {
$(element).removeClass(errorClass);
},
// Different components require proper error label placement
errorPlacement: function(error, element) {
// Unstyled checkboxes, radios
if (element.parents().hasClass('form-check')) {
error.appendTo( element.parents('.form-check').parent() );
}
// Input with icons and Select2
else if (element.parents().hasClass('form-group-feedback') || element.hasClass('select2-hidden-accessible')) {
error.appendTo( element.parent() );
}
// Input group, styled file input
else if (element.parent().is('.uniform-uploader, .uniform-select') || element.parents().hasClass('input-group')) {
error.appendTo( element.parent().parent() );
}
// Other elements
else {
error.insertAfter(element);
}
},
rules: {
email: {
email: true
}
}
});
};
// Uniform
var _componentUniform = function() {
if (!$().uniform) {
console.warn('Warning - uniform.min.js is not loaded.');
return;
}
// Initialize
$('.form-input-styled').uniform({
fileButtonClass: 'action btn bg-blue'
});
};
// Select2 select
var _componentSelect2 = function() {
if (!$().select2) {
console.warn('Warning - select2.min.js is not loaded.');
return;
}
// Initialize
var $select = $('.form-control-select2').select2({
minimumResultsForSearch: Infinity,
width: '100%'
});
// Trigger value change when selection is made
$select.on('change', function() {
$(this).trigger('blur');
});
};
//
// Return objects assigned to module
//
return {
init: function() {
_componentWizard();
_componentUniform();
_componentSelect2();
}
}
}();
// Initialize module
// ------------------------------
document.addEventListener('DOMContentLoaded', function() {
FormWizard.init();
});
OHA YOOOO