From e76b32b9d9d98b4d259ae607419dc523048d90ac Mon Sep 17 00:00:00 2001 From: Dipu Raj Date: Sat, 30 Jul 2022 18:15:05 +0530 Subject: [PATCH] Fixes and improvements --- CHANGELOG.md | 5 +++ dist/js/jquery.smartWizard.js | 56 +++++++++++++++++++------------ dist/js/jquery.smartWizard.min.js | 4 +-- package.json | 2 +- src/js/jquery.smartWizard.js | 56 +++++++++++++++++++------------ 5 files changed, 78 insertions(+), 45 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d98174..d49c1b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +v6.0.3 +----- +- **Fixed:** Navigation not properly maintained when navigate fast +- **Changed:** Code optimizations + v6.0.1 ----- - **Added:** Support for jQuery Slim version diff --git a/dist/js/jquery.smartWizard.js b/dist/js/jquery.smartWizard.js index 8c227e7..f0afdcd 100644 --- a/dist/js/jquery.smartWizard.js +++ b/dist/js/jquery.smartWizard.js @@ -9,7 +9,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } /*! -* jQuery SmartWizard v6.0.1 +* jQuery SmartWizard v6.0.3 * The awesome step wizard plugin for jQuery * http://www.techlaboratory.net/jquery-smartwizard * @@ -51,7 +51,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = selected: 0, // Initial selected step, 0 = first step theme: 'basic', - // theme for the wizard, related css need to include for other than default theme + // Theme for the wizard, related css need to include for other than default theme justified: true, // Nav menu justification. true/false autoAdjustHeight: true, @@ -282,12 +282,12 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = value: function _setElements() { var _this2 = this; - // Set the main element - this.main.addClass(this.options.style.mainCss); // Set theme option - + // Set theme option this.main.removeClass(function (i, className) { - return (className.match(/(^|\s)sw-theme-\S+/g) || []).join(' '); - }).addClass(this.options.style.themePrefixCss + this.options.theme); // Set justify option + return (className.match(new RegExp('(^|\\s)' + _this2.options.style.themePrefixCss + '\\S+', 'g')) || []).join(' '); + }).addClass(this.options.style.themePrefixCss + this.options.theme); // Set the main element + + this.main.addClass(this.options.style.mainCss).addClass(this.options.style.themePrefixCss + this.options.theme); // Set justify option this.main.toggleClass(this.options.style.justifiedCss, this.options.justified); // Set the anchor default style @@ -442,20 +442,20 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = _this4._transit(selPage, curPage, stepDirection, function () { - // Update the current index - _this4.current_index = idx; // Fix height with content + // Fix height with content + _this4._fixHeight(idx); // Trigger "showStep" event - _this4._fixHeight(idx); // Set the buttons based on the step + _this4._triggerEvent("showStep", [selStep, idx, stepDirection, _this4._getStepPosition(idx)]); + }); // Update the current index - _this4._setButtons(idx); // Set the progressbar based on the step + _this4.current_index = idx; // Set the buttons based on the step - _this4._setProgressbar(idx); // Trigger "showStep" event + _this4._setButtons(idx); // Set the progressbar based on the step - _this4._triggerEvent("showStep", [selStep, idx, stepDirection, _this4._getStepPosition(idx)]); - }); + _this4._setProgressbar(idx); }); } }, { @@ -560,6 +560,8 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = value: function _transit(elmToShow, elmToHide, stepDirection, callback) { var transitFn = $.fn.smartWizard.transitions[this.options.transition.animation]; + this._stopAnimations(); + if ($.isFunction(transitFn)) { transitFn(elmToShow, elmToHide, stepDirection, this, function (res) { if (res === false) { @@ -575,6 +577,14 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = callback(); } } + }, { + key: "_stopAnimations", + value: function _stopAnimations() { + if ($.isFunction(this.container.finish)) { + this.pages.finish(); + this.container.finish(); + } + } }, { key: "_fixHeight", value: function _fixHeight(idx) { @@ -596,19 +606,23 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = key: "_setAnchor", value: function _setAnchor(idx) { // Current step anchor > Remove other classes and add done class - this.steps.eq(this.current_index).removeClass(this.options.style.anchorActiveCss); + if (this.current_index !== null && this.current_index >= 0) { + var removeCss = this.options.style.anchorActiveCss; + var addCss = ''; - if (this.options.anchor.enableDoneState !== false && this.current_index !== null && this.current_index >= 0) { - this.steps.eq(this.current_index).addClass(this.options.style.anchorDoneCss); + if (this.options.anchor.enableDoneState !== false) { + addCss += this.options.style.anchorDoneCss; - if (this.options.anchor.unDoneOnBackNavigation !== false && this._getStepDirection(idx) === 'backward') { - this.steps.eq(this.current_index).removeClass(this.options.style.anchorDoneCss); + if (this.options.anchor.unDoneOnBackNavigation !== false && this._getStepDirection(idx) === 'backward') { + removeCss += ' ' + this.options.style.anchorDoneCss; + } } + + this.steps.eq(this.current_index).removeClass(removeCss).addClass(addCss); } // Next step anchor > Remove other classes and add active class - this.steps.eq(idx).removeClass(this.options.style.anchorDoneCss); - this.steps.eq(idx).addClass(this.options.style.anchorActiveCss); + this.steps.eq(idx).removeClass(this.options.style.anchorDoneCss).addClass(this.options.style.anchorActiveCss); } }, { key: "_setButtons", diff --git a/dist/js/jquery.smartWizard.min.js b/dist/js/jquery.smartWizard.min.js index 90a8c38..0d42c8b 100644 --- a/dist/js/jquery.smartWizard.min.js +++ b/dist/js/jquery.smartWizard.min.js @@ -1,6 +1,6 @@ "use strict";function _classCallCheck(t,s){if(!(t instanceof s))throw new TypeError("Cannot call a class as a function")}function _defineProperties(t,s){for(var e=0;e").addClass("sw-toolbar-elm "+this.options.style.toolbarCss+" "+this.options.style.toolbarPrefixCss+t).attr("role","toolbar"),e=!1!==this.options.toolbar.showNextButton?l("").text(this.options.lang.next).addClass("btn "+this.options.style.btnNextCss+" "+this.options.style.btnCss).attr("type","button"):null,n=!1!==this.options.toolbar.showPreviousButton?l("").text(this.options.lang.previous).addClass("btn "+this.options.style.btnPrevCss+" "+this.options.style.btnCss).attr("type","button"):null;return s.append(n,e,this.options.toolbar.extraHtml)}},{key:"_navigate",value:function(t){this._showStep(this._getShowable(this.current_index,t))}},{key:"_showStep",value:function(n){var i=this;if(-1===n||null===n)return!1;if(n==this.current_index)return!1;if(!this.steps.eq(n))return!1;if(!this._isEnabled(this.steps.eq(n)))return!1;var o=this._getStepDirection(n);if(-1!==this.current_index&&!1===this._triggerEvent("leaveStep",[this._getStepAnchor(this.current_index),this.current_index,n,o]))return!1;this._loadContent(n,function(){var t=i._getStepAnchor(n);i._setURLHash(t.attr("href")),i._setAnchor(n);var s=i._getStepPage(i.current_index),e=i._getStepPage(n);i._transit(e,s,o,function(){i.current_index=n,i._fixHeight(n),i._setButtons(n),i._setProgressbar(n),i._triggerEvent("showStep",[t,n,o,i._getStepPosition(n)])})})}},{key:"_getShowable",value:function(e,n){var i=this,o=null;return("prev"==n?l(this.steps.slice(0,e).get().reverse()):this.steps.slice(e+1)).each(function(t,s){if(i._isEnabled(l(s)))return o="prev"==n?e-(t+1):t+e+1,!1}),o}},{key:"_isShowable",value:function(t){if(!this._isEnabled(t))return!1;var s=t.hasClass(this.options.style.anchorDoneCss);return(!1!==this.options.anchor.enableDoneStateNavigation||!s)&&!(!1===this.options.anchor.enableNavigationAlways&&!s)}},{key:"_isEnabled",value:function(t){return!t.hasClass(this.options.style.anchorDisabledCss)&&!t.hasClass(this.options.style.anchorHiddenCss)}},{key:"_getStepDirection",value:function(t){return this.current_index").addClass("sw-toolbar-elm "+this.options.style.toolbarCss+" "+this.options.style.toolbarPrefixCss+t).attr("role","toolbar"),e=!1!==this.options.toolbar.showNextButton?l("").text(this.options.lang.next).addClass("btn "+this.options.style.btnNextCss+" "+this.options.style.btnCss).attr("type","button"):null,n=!1!==this.options.toolbar.showPreviousButton?l("").text(this.options.lang.previous).addClass("btn "+this.options.style.btnPrevCss+" "+this.options.style.btnCss).attr("type","button"):null;return s.append(n,e,this.options.toolbar.extraHtml)}},{key:"_navigate",value:function(t){this._showStep(this._getShowable(this.current_index,t))}},{key:"_showStep",value:function(n){var i=this;if(-1===n||null===n)return!1;if(n==this.current_index)return!1;if(!this.steps.eq(n))return!1;if(!this._isEnabled(this.steps.eq(n)))return!1;var o=this._getStepDirection(n);if(-1!==this.current_index&&!1===this._triggerEvent("leaveStep",[this._getStepAnchor(this.current_index),this.current_index,n,o]))return!1;this._loadContent(n,function(){var t=i._getStepAnchor(n);i._setURLHash(t.attr("href")),i._setAnchor(n);var s=i._getStepPage(i.current_index),e=i._getStepPage(n);i._transit(e,s,o,function(){i._fixHeight(n),i._triggerEvent("showStep",[t,n,o,i._getStepPosition(n)])}),i.current_index=n,i._setButtons(n),i._setProgressbar(n)})}},{key:"_getShowable",value:function(e,n){var i=this,o=null;return("prev"==n?l(this.steps.slice(0,e).get().reverse()):this.steps.slice(e+1)).each(function(t,s){if(i._isEnabled(l(s)))return o="prev"==n?e-(t+1):t+e+1,!1}),o}},{key:"_isShowable",value:function(t){if(!this._isEnabled(t))return!1;var s=t.hasClass(this.options.style.anchorDoneCss);return(!1!==this.options.anchor.enableDoneStateNavigation||!s)&&!(!1===this.options.anchor.enableNavigationAlways&&!s)}},{key:"_isEnabled",value:function(t){return!t.hasClass(this.options.style.anchorDisabledCss)&&!t.hasClass(this.options.style.anchorHiddenCss)}},{key:"_getStepDirection",value:function(t){return this.current_index { + return (className.match(new RegExp('(^|\\s)' + this.options.style.themePrefixCss + '\\S+','g')) || []).join(' '); }).addClass(this.options.style.themePrefixCss + this.options.theme); + // Set the main element + this.main.addClass(this.options.style.mainCss).addClass(this.options.style.themePrefixCss + this.options.theme); + // Set justify option this.main.toggleClass(this.options.style.justifiedCss, this.options.justified); @@ -377,17 +377,18 @@ const selPage = this._getStepPage(idx); // transit the step this._transit(selPage, curPage, stepDirection, () => { - // Update the current index - this.current_index = idx; // Fix height with content this._fixHeight(idx); - // Set the buttons based on the step - this._setButtons(idx); - // Set the progressbar based on the step - this._setProgressbar(idx); // Trigger "showStep" event this._triggerEvent("showStep", [selStep, idx, stepDirection, this._getStepPosition(idx)]); }); + + // Update the current index + this.current_index = idx; + // Set the buttons based on the step + this._setButtons(idx); + // Set the progressbar based on the step + this._setProgressbar(idx); }); } @@ -468,6 +469,7 @@ _transit(elmToShow, elmToHide, stepDirection, callback) { const transitFn = $.fn.smartWizard.transitions[this.options.transition.animation]; + this._stopAnimations(); if ($.isFunction(transitFn)) { transitFn(elmToShow, elmToHide, stepDirection, this, (res) => { if (res === false) { @@ -483,6 +485,13 @@ } } + _stopAnimations() { + if ($.isFunction(this.container.finish)) { + this.pages.finish(); + this.container.finish(); + } + } + _fixHeight(idx) { if (this.options.autoAdjustHeight === false) return; // Auto adjust height of the container @@ -496,17 +505,22 @@ _setAnchor(idx) { // Current step anchor > Remove other classes and add done class - this.steps.eq(this.current_index).removeClass(this.options.style.anchorActiveCss); - if (this.options.anchor.enableDoneState !== false && this.current_index !== null && this.current_index >= 0) { - this.steps.eq(this.current_index).addClass(this.options.style.anchorDoneCss); - if (this.options.anchor.unDoneOnBackNavigation !== false && this._getStepDirection(idx) === 'backward') { - this.steps.eq(this.current_index).removeClass(this.options.style.anchorDoneCss); + if (this.current_index !== null && this.current_index >= 0) { + let removeCss = this.options.style.anchorActiveCss; + let addCss = ''; + + if (this.options.anchor.enableDoneState !== false) { + addCss += this.options.style.anchorDoneCss; + if (this.options.anchor.unDoneOnBackNavigation !== false && this._getStepDirection(idx) === 'backward') { + removeCss += ' ' + this.options.style.anchorDoneCss; + } } + + this.steps.eq(this.current_index).removeClass(removeCss).addClass(addCss); } // Next step anchor > Remove other classes and add active class - this.steps.eq(idx).removeClass(this.options.style.anchorDoneCss); - this.steps.eq(idx).addClass(this.options.style.anchorActiveCss); + this.steps.eq(idx).removeClass(this.options.style.anchorDoneCss).addClass(this.options.style.anchorActiveCss); } _setButtons(idx) { @@ -811,7 +825,7 @@ elmToShow.css(initCss2); callback(); }); - }, + }, css: (elmToShow, elmToHide, stepDirection, wizardObj, callback) => { if (wizardObj.options.transition.fwdHideCss.length == 0 || wizardObj.options.transition.bckHideCss.length == 0 ) { callback(false); return; }