diff --git a/jquery.timeago.js b/jquery.timeago.js index 4d58026e..018c474e 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 e0e105dd..379833b0 100644 --- a/test/index.html +++ b/test/index.html @@ -188,6 +188,10 @@

Settings

  • [90 sec]
  • [120 sec]
  • + +

    Disposal

    +

    +

    @@ -238,6 +242,8 @@

    Settings

    $("abbr.tonumbers").each(toWords); unloadNumbers(); + setupDisposal(); + loadYoungOldYears(); $("abbr.toyoungold").each(toWords); @@ -582,6 +588,28 @@

    Settings

    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 7cf78cff..501de1bc 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 = {