diff --git a/jquery.timeago.js b/jquery.timeago.js
index 4d58026..018c474 100644
--- a/jquery.timeago.js
+++ b/jquery.timeago.js
@@ -128,7 +128,7 @@
refresh_el();
var $s = $t.settings;
if ($s.refreshMillis > 0) {
- setInterval(refresh_el, $s.refreshMillis);
+ this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis);
}
},
update: function(time){
@@ -138,6 +138,12 @@
updateFromDOM: function(){
$(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) });
refresh.apply(this);
+ },
+ dispose: function () {
+ if (this._timeagoInterval) {
+ window.clearInterval(this._timeagoInterval);
+ this._timeagoInterval = null;
+ }
}
};
diff --git a/test/index.html b/test/index.html
index e0e105d..379833b 100644
--- a/test/index.html
+++ b/test/index.html
@@ -188,6 +188,10 @@
[90 sec]
[120 sec]
+
+ Disposal
+
+
@@ -238,6 +242,8 @@
$("abbr.tonumbers").each(toWords);
unloadNumbers();
+ setupDisposal();
+
loadYoungOldYears();
$("abbr.toyoungold").each(toWords);
@@ -582,6 +588,28 @@
ok($("#testNoSpaces1").html().match(/^2minutesago$/), "Settings correctly applied");
ok($("#testNullSpaces1").html().match(/^2minutesago$/), "Settings correctly applied");
});
+
+ module("Disposal");
+
+ asyncTest("disposal", function() {
+ $(".disposal.disposed").timeago('dispose');
+ var initialTime_disposedTimeago = $(".disposal.disposed").html();
+ var initialTime_activeTimeago = $(".disposal.notDisposed").html();
+
+ expect(2);
+ setTimeout(function() {
+ var updatedTime_disposedTimeago = $(".disposal.disposed").html();
+ var updatedTime_activeTimeago = $(".disposal.notDisposed").html();
+
+ ok(initialTime_disposedTimeago === updatedTime_disposedTimeago, "A disposed timeago didn't get updated");
+ ok(initialTime_activeTimeago !== updatedTime_activeTimeago, "A non-disposed timeago continued to be updated");
+
+ // Dispose still-active timeago
+ $(".disposal.notDisposed").timeago('dispose');
+ resetRefreshMillis();
+ start();
+ }, 50);
+ });
})(jQuery);
//]]>
diff --git a/test/test_helpers.js b/test/test_helpers.js
index 7cf78cf..501de1b 100644
--- a/test/test_helpers.js
+++ b/test/test_helpers.js
@@ -30,6 +30,11 @@ function unloadCutoffSetting() {
jQuery.timeago.settings.cutoff = 0;
}
+function setupDisposal() {
+ jQuery.timeago.settings.refreshMillis = 50;
+ $('abbr.disposal').attr("title", iso8601(new Date())).timeago();
+}
+
function loadPigLatin() {
jQuery.timeago.settings.strings = {
suffixAgo: "ago-hay",
@@ -84,6 +89,10 @@ function loadRussian() {
})();
}
+function resetRefreshMillis() {
+ jQuery.timeago.settings.refreshMillis = 60000;
+}
+
function loadMillis() {
var millisSubstitution = function(number, millis) { return millis + " milliseconds"; };
jQuery.timeago.settings.strings = {