(function ($) { if (!$ || $.fn.steps) { return; } $.fn.steps = function (options) { var settings = $.extend( { onFinish: function () {} }, options || {} ); return this.each(function () { var $wizard = $(this); var $steps = $wizard.find('.step-steps > li'); var $panels = $wizard.find('.step-content > .step-tab-panel'); var $footer = $wizard.find('.step-footer'); var $prev = $footer.find('[data-direction="prev"]'); var $next = $footer.find('[data-direction="next"]'); var $finish = $footer.find('[data-direction="finish"]'); var targets = $steps .map(function () { return $(this).find('a').attr('href'); }) .get(); if (!$steps.length || !$panels.length) { return; } var currentIndex = $steps.index($steps.filter('.active').first()); if (currentIndex < 0) { currentIndex = 0; } function setStep(index) { if (index < 0 || index >= targets.length) { return; } currentIndex = index; $steps.removeClass('active done').each(function (i) { var $step = $(this); if (i < index) { $step.addClass('done'); } if (i === index) { $step.addClass('active'); } }); $steps.find('a').attr('aria-selected', 'false'); $steps.eq(index).find('a').attr('aria-selected', 'true'); $panels.removeClass('active').hide(); var target = targets[index]; if (target && target.charAt(0) === '#') { $wizard.find(target).addClass('active').show(); } $footer.toggleClass('is-first', index === 0); $footer.toggleClass('is-last', index === targets.length - 1); $prev.prop('disabled', index === 0); $next.prop('disabled', index >= targets.length - 1); } $steps.find('a').on('click', function (event) { event.preventDefault(); var target = $(this).attr('href'); var index = targets.indexOf(target); if (index !== -1) { setStep(index); } }); $prev.on('click', function (event) { event.preventDefault(); setStep(currentIndex - 1); }); $next.on('click', function (event) { event.preventDefault(); setStep(currentIndex + 1); }); $finish.on('click', function (event) { event.preventDefault(); if (currentIndex === targets.length - 1) { settings.onFinish.call($wizard[0]); } else { setStep(targets.length - 1); } }); setStep(currentIndex); }); }; })(jQuery);