Refactor RelativeDates, and fix the last index refresh timer not being always updated.
This commit is contained in:
parent
f12ba5ee64
commit
a6d41a0de0
@ -1,4 +1,4 @@
|
|||||||
[<a href="./catalog">Catalog</a>]
|
[<a href="./catalog">Catalog</a>]
|
||||||
[<time id="index-last-refresh" title="Last index refresh" data-init="1">...</time>]
|
[<time id="index-last-refresh" title="Last index refresh">...</time>]
|
||||||
<input type="search" id="index-search" class="field" placeholder="Search">
|
<input type="search" id="index-search" class="field" placeholder="Search">
|
||||||
<a id="index-search-clear" class="fa fa-times-circle" href="javascript:;"></a>
|
<a id="index-search-clear" class="fa fa-times-circle" href="javascript:;"></a>
|
||||||
|
|||||||
@ -225,16 +225,7 @@ Index =
|
|||||||
|
|
||||||
timeEl = $ '#index-last-refresh', Index.navLinks
|
timeEl = $ '#index-last-refresh', Index.navLinks
|
||||||
timeEl.dataset.utc = e.timeStamp <% if (type === 'userscript') { %>/ 1000<% } %>
|
timeEl.dataset.utc = e.timeStamp <% if (type === 'userscript') { %>/ 1000<% } %>
|
||||||
if timeEl.dataset.init
|
RelativeDates.update timeEl
|
||||||
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()
|
|
||||||
Index.scrollToIndex()
|
Index.scrollToIndex()
|
||||||
parse: (pages) ->
|
parse: (pages) ->
|
||||||
Index.parseThreadList pages
|
Index.parseThreadList pages
|
||||||
|
|||||||
@ -25,7 +25,7 @@ RelativeDates =
|
|||||||
dateEl = @nodes.date
|
dateEl = @nodes.date
|
||||||
dateEl.title = dateEl.textContent
|
dateEl.title = dateEl.textContent
|
||||||
|
|
||||||
RelativeDates.setUpdate post: @
|
RelativeDates.update @
|
||||||
|
|
||||||
# diff is milliseconds from now.
|
# diff is milliseconds from now.
|
||||||
relative: (diff, now, date) ->
|
relative: (diff, now, date) ->
|
||||||
@ -75,43 +75,41 @@ RelativeDates =
|
|||||||
return if d.hidden
|
return if d.hidden
|
||||||
|
|
||||||
now = new Date()
|
now = new Date()
|
||||||
update now for update in RelativeDates.stale
|
RelativeDates.update data, now for data in RelativeDates.stale
|
||||||
RelativeDates.stale = []
|
RelativeDates.stale = []
|
||||||
|
|
||||||
# Reset automatic flush.
|
# Reset automatic flush.
|
||||||
clearTimeout RelativeDates.timeout
|
clearTimeout RelativeDates.timeout
|
||||||
RelativeDates.timeout = setTimeout RelativeDates.flush, RelativeDates.INTERVAL
|
RelativeDates.timeout = setTimeout RelativeDates.flush, RelativeDates.INTERVAL
|
||||||
|
|
||||||
# Create function `update()`, closed over post, that, when called
|
# `update()`, when called from `flush()`, updates the elements,
|
||||||
# from `flush()`, updates the elements, and re-calls `setOwnTimeout()` to
|
# and re-calls `setOwnTimeout()` to re-add `data` to the stale list later.
|
||||||
# re-add `update()` to the stale list later.
|
update: (data, now) ->
|
||||||
setUpdate: ({post, el}) ->
|
isPost = data instanceof Post
|
||||||
setOwnTimeout = (diff) ->
|
date = if isPost
|
||||||
delay = if diff < $.MINUTE
|
data.info.date
|
||||||
$.SECOND - (diff + $.SECOND / 2) % $.SECOND
|
else
|
||||||
else if diff < $.HOUR
|
new Date +data.dataset.utc
|
||||||
$.MINUTE - (diff + $.MINUTE / 2) % $.MINUTE
|
now or= new Date()
|
||||||
else if diff < $.DAY
|
diff = now - date
|
||||||
$.HOUR - (diff + $.HOUR / 2) % $.HOUR
|
relative = RelativeDates.relative diff, now, date
|
||||||
else
|
if isPost
|
||||||
$.DAY - (diff + $.DAY / 2) % $.DAY
|
for singlePost in [data].concat data.clones
|
||||||
setTimeout markStale, delay
|
singlePost.nodes.date.firstChild.textContent = relative
|
||||||
|
else
|
||||||
update = (now) ->
|
data.firstChild.textContent = relative
|
||||||
date = if post
|
RelativeDates.setOwnTimeout diff, data
|
||||||
post.info.date
|
setOwnTimeout: (diff, data) ->
|
||||||
else
|
delay = if diff < $.MINUTE
|
||||||
new Date +el.dataset.utc
|
$.SECOND - (diff + $.SECOND / 2) % $.SECOND
|
||||||
diff = now - date
|
else if diff < $.HOUR
|
||||||
relative = RelativeDates.relative diff, now, date
|
$.MINUTE - (diff + $.MINUTE / 2) % $.MINUTE
|
||||||
if post
|
else if diff < $.DAY
|
||||||
for singlePost in [post].concat post.clones
|
$.HOUR - (diff + $.HOUR / 2) % $.HOUR
|
||||||
singlePost.nodes.date.firstChild.textContent = relative
|
else
|
||||||
else
|
$.DAY - (diff + $.DAY / 2) % $.DAY
|
||||||
el.firstChild.textContent = RelativeDates.relative diff, now, date
|
setTimeout RelativeDates.markStale, delay, data
|
||||||
setOwnTimeout diff
|
markStale: (data) ->
|
||||||
|
return if data in RelativeDates.stale # We can call RelativeDates.update() multiple times.
|
||||||
markStale = -> RelativeDates.stale.push update
|
return if data instanceof Post and !g.posts[data.fullID] # collected post.
|
||||||
|
RelativeDates.stale.push data
|
||||||
# Kick off initial timeout.
|
|
||||||
update new Date()
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user