diff --git a/html/General/Index-navlinks.html b/html/General/Index-navlinks.html
index cb69adae9..7caf98685 100644
--- a/html/General/Index-navlinks.html
+++ b/html/General/Index-navlinks.html
@@ -1,4 +1,4 @@
[Catalog]
-[]
+[]
diff --git a/src/General/Index.coffee b/src/General/Index.coffee
index 834b8e517..14af9acbc 100644
--- a/src/General/Index.coffee
+++ b/src/General/Index.coffee
@@ -225,16 +225,7 @@ Index =
timeEl = $ '#index-last-refresh', Index.navLinks
timeEl.dataset.utc = e.timeStamp <% if (type === 'userscript') { %>/ 1000<% } %>
- if timeEl.dataset.init
- RelativeDates.setUpdate el: timeEl
- <% if (type === 'userscript') { %>
- # XXX https://github.com/greasemonkey/greasemonkey/issues/1571
- timeEl.removeAttribute 'data-init'
- <% } else { %>
- delete timeEl.dataset.init
- <% } %>
- else
- RelativeDates.flush()
+ RelativeDates.update timeEl
Index.scrollToIndex()
parse: (pages) ->
Index.parseThreadList pages
diff --git a/src/Miscellaneous/RelativeDates.coffee b/src/Miscellaneous/RelativeDates.coffee
index b856a19fd..810c7bceb 100644
--- a/src/Miscellaneous/RelativeDates.coffee
+++ b/src/Miscellaneous/RelativeDates.coffee
@@ -25,7 +25,7 @@ RelativeDates =
dateEl = @nodes.date
dateEl.title = dateEl.textContent
- RelativeDates.setUpdate post: @
+ RelativeDates.update @
# diff is milliseconds from now.
relative: (diff, now, date) ->
@@ -75,43 +75,41 @@ RelativeDates =
return if d.hidden
now = new Date()
- update now for update in RelativeDates.stale
+ RelativeDates.update data, now for data in RelativeDates.stale
RelativeDates.stale = []
# Reset automatic flush.
clearTimeout RelativeDates.timeout
RelativeDates.timeout = setTimeout RelativeDates.flush, RelativeDates.INTERVAL
- # Create function `update()`, closed over post, that, when called
- # from `flush()`, updates the elements, and re-calls `setOwnTimeout()` to
- # re-add `update()` to the stale list later.
- setUpdate: ({post, el}) ->
- setOwnTimeout = (diff) ->
- delay = if diff < $.MINUTE
- $.SECOND - (diff + $.SECOND / 2) % $.SECOND
- else if diff < $.HOUR
- $.MINUTE - (diff + $.MINUTE / 2) % $.MINUTE
- else if diff < $.DAY
- $.HOUR - (diff + $.HOUR / 2) % $.HOUR
- else
- $.DAY - (diff + $.DAY / 2) % $.DAY
- setTimeout markStale, delay
-
- update = (now) ->
- date = if post
- post.info.date
- else
- new Date +el.dataset.utc
- diff = now - date
- relative = RelativeDates.relative diff, now, date
- if post
- for singlePost in [post].concat post.clones
- singlePost.nodes.date.firstChild.textContent = relative
- else
- el.firstChild.textContent = RelativeDates.relative diff, now, date
- setOwnTimeout diff
-
- markStale = -> RelativeDates.stale.push update
-
- # Kick off initial timeout.
- update new Date()
+ # `update()`, when called from `flush()`, updates the elements,
+ # and re-calls `setOwnTimeout()` to re-add `data` to the stale list later.
+ update: (data, now) ->
+ isPost = data instanceof Post
+ date = if isPost
+ data.info.date
+ else
+ new Date +data.dataset.utc
+ now or= new Date()
+ diff = now - date
+ relative = RelativeDates.relative diff, now, date
+ if isPost
+ for singlePost in [data].concat data.clones
+ singlePost.nodes.date.firstChild.textContent = relative
+ else
+ data.firstChild.textContent = relative
+ RelativeDates.setOwnTimeout diff, data
+ setOwnTimeout: (diff, data) ->
+ delay = if diff < $.MINUTE
+ $.SECOND - (diff + $.SECOND / 2) % $.SECOND
+ else if diff < $.HOUR
+ $.MINUTE - (diff + $.MINUTE / 2) % $.MINUTE
+ else if diff < $.DAY
+ $.HOUR - (diff + $.HOUR / 2) % $.HOUR
+ else
+ $.DAY - (diff + $.DAY / 2) % $.DAY
+ setTimeout RelativeDates.markStale, delay, data
+ markStale: (data) ->
+ return if data in RelativeDates.stale # We can call RelativeDates.update() multiple times.
+ return if data instanceof Post and !g.posts[data.fullID] # collected post.
+ RelativeDates.stale.push data