diff --git a/src/progress.js b/src/progress.js index 9d37167..842bd39 100644 --- a/src/progress.js +++ b/src/progress.js @@ -338,6 +338,49 @@ } } + /** + * Remove progress bar without finishing + * + * @api private + * @method _kill + */ + function _kill() { + var target = this._targetElement[0]; + if(!target) return; + var progressjsId = parseInt(target.getAttribute('data-progressjs')); + + for (var i = 0, elmsLength = this._targetElement.length; i < elmsLength; i++) { + var currentElement = this._targetElement[i]; + var percentElement = _getPercentElement(currentElement); + + if (!percentElement) + return; + + //I believe I should handle this situation with eventListener and `transitionend` event but I'm not sure + //about compatibility with IEs. Should be fixed in further versions. + (function(percentElement, currentElement) { + percentElement.parentNode.className += " progressjs-end"; + + setTimeout(function() { + //remove the percent element from page + percentElement.parentNode.parentNode.removeChild(percentElement.parentNode); + //and remove the attribute + currentElement.removeAttribute("data-progressjs"); + }, 1000); + })(percentElement, currentElement); + } + + //clean the setInterval for autoIncrease function + if (window._progressjsIntervals[progressjsId]) { + //`delete` keyword has some problems in IE + try { + clearInterval(window._progressjsIntervals[progressjsId]); + window._progressjsIntervals[progressjsId] = null; + delete window._progressjsIntervals[progressjsId]; + } catch(ex) { } + } + } + /** * Create the progress bar container * @@ -491,6 +534,10 @@ _end.call(this); return this; }, + kill: function() { + _kill.call(this); + return this; + }, onbeforeend: function(providedCallback) { if (typeof (providedCallback) === 'function') { this._onBeforeEndCallback = providedCallback;