rm $.debounce, better Relative Dates.
This commit is contained in:
parent
7657167953
commit
479ddffd95
@ -835,20 +835,6 @@
|
||||
open: function(url) {
|
||||
return (GM_openInTab || window.open)(url, '_blank');
|
||||
},
|
||||
debounce: function(wait, fn) {
|
||||
var timeout;
|
||||
timeout = null;
|
||||
return function() {
|
||||
if (timeout) {
|
||||
clearTimeout(timeout);
|
||||
} else {
|
||||
fn.apply(this, arguments);
|
||||
}
|
||||
return timeout = setTimeout((function() {
|
||||
return timeout = null;
|
||||
}), wait);
|
||||
};
|
||||
},
|
||||
queueTask: (function() {
|
||||
var execTask, taskChannel, taskQueue;
|
||||
taskQueue = [];
|
||||
@ -3334,18 +3320,21 @@
|
||||
return;
|
||||
}
|
||||
$.on(d, 'visibilitychange ThreadUpdate', this.flush);
|
||||
this.flush();
|
||||
return Post.prototype.callbacks.push({
|
||||
name: 'Relative Post Dates',
|
||||
cb: this.node
|
||||
});
|
||||
},
|
||||
node: function() {
|
||||
var dateEl, diff;
|
||||
var dateEl;
|
||||
if (this.isClone) {
|
||||
RelativeDates.flush();
|
||||
return;
|
||||
}
|
||||
dateEl = this.nodes.date;
|
||||
dateEl.title = dateEl.textContent;
|
||||
diff = Date.now() - this.info.date;
|
||||
dateEl.textContent = RelativeDates.relative(diff);
|
||||
return RelativeDates.setUpdate(this, diff);
|
||||
return RelativeDates.setUpdate(this);
|
||||
},
|
||||
relative: function(diff) {
|
||||
var number, rounded, unit;
|
||||
@ -3357,7 +3346,7 @@
|
||||
return "" + rounded + " " + unit + " ago";
|
||||
},
|
||||
stale: [],
|
||||
flush: $.debounce($.SECOND, function() {
|
||||
flush: function() {
|
||||
var now, update, _i, _len, _ref;
|
||||
if (d.hidden) {
|
||||
return;
|
||||
@ -3371,26 +3360,30 @@
|
||||
RelativeDates.stale = [];
|
||||
clearTimeout(RelativeDates.timeout);
|
||||
return RelativeDates.timeout = setTimeout(RelativeDates.flush, RelativeDates.INTERVAL);
|
||||
}),
|
||||
setUpdate: function(post, diff) {
|
||||
var dateEl, markStale, setOwnTimeout, update;
|
||||
},
|
||||
setUpdate: function(post) {
|
||||
var markStale, setOwnTimeout, update;
|
||||
setOwnTimeout = function(diff) {
|
||||
var delay;
|
||||
delay = diff > $.HOUR ? diff % $.HOUR : diff > $.MINUTE ? diff % $.MINUTE : diff % $.SECOND;
|
||||
return setTimeout(markStale, delay);
|
||||
};
|
||||
dateEl = post.nodes.date;
|
||||
update = function(now) {
|
||||
if (d.contains(dateEl)) {
|
||||
diff = now - post.info.date;
|
||||
dateEl.textContent = RelativeDates.relative(diff);
|
||||
return setOwnTimeout(diff);
|
||||
var dateEl, diff, relative, singlePost, _i, _len, _ref;
|
||||
diff = now - post.info.date;
|
||||
relative = RelativeDates.relative(diff);
|
||||
_ref = [post].concat(post.clones);
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
singlePost = _ref[_i];
|
||||
dateEl = singlePost.nodes.date;
|
||||
dateEl.textContent = relative;
|
||||
}
|
||||
return setOwnTimeout(diff);
|
||||
};
|
||||
markStale = function() {
|
||||
return RelativeDates.stale.push(update);
|
||||
};
|
||||
return setOwnTimeout(diff);
|
||||
return update(Date.now());
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
11
lib/$.coffee
11
lib/$.coffee
@ -140,17 +140,6 @@ $.extend $,
|
||||
root.dispatchEvent new CustomEvent event, {bubbles: true, detail}
|
||||
open: (url) ->
|
||||
(GM_openInTab or window.open) url, '_blank'
|
||||
debounce: (wait, fn) ->
|
||||
timeout = null
|
||||
return ->
|
||||
if timeout
|
||||
# stop current reset
|
||||
clearTimeout timeout
|
||||
else
|
||||
fn.apply this, arguments
|
||||
|
||||
# after wait, let next invocation execute immediately
|
||||
timeout = setTimeout (-> timeout = null), wait
|
||||
queueTask: (->
|
||||
# inspired by https://www.w3.org/Bugs/Public/show_bug.cgi?id=15007
|
||||
taskQueue = []
|
||||
|
||||
@ -2002,21 +2002,24 @@ RelativeDates =
|
||||
# flush when page becomes visible again
|
||||
$.on d, 'visibilitychange ThreadUpdate', @flush
|
||||
|
||||
# setup the timeout
|
||||
@flush()
|
||||
|
||||
Post::callbacks.push
|
||||
name: 'Relative Post Dates'
|
||||
cb: @node
|
||||
node: ->
|
||||
dateEl = @nodes.date
|
||||
if @isClone
|
||||
RelativeDates.flush()
|
||||
return
|
||||
|
||||
# Show original absolute time as tooltip so users can still know exact times
|
||||
# Since "Time Formatting" runs `node` before us, the title tooltip will
|
||||
# pick up the user-formatted time instead of 4chan time when enabled.
|
||||
dateEl = @nodes.date
|
||||
dateEl.title = dateEl.textContent
|
||||
|
||||
diff = Date.now() - @info.date
|
||||
|
||||
dateEl.textContent = RelativeDates.relative diff
|
||||
RelativeDates.setUpdate @, diff
|
||||
RelativeDates.setUpdate @
|
||||
|
||||
# diff is milliseconds from now
|
||||
relative: (diff) ->
|
||||
@ -2044,7 +2047,7 @@ RelativeDates =
|
||||
# each individual dateTime element will add its update() function to the stale list
|
||||
# when it is to be called.
|
||||
stale: []
|
||||
flush: $.debounce($.SECOND, ->
|
||||
flush: ->
|
||||
# no point in changing the dates until the user sees them
|
||||
return if d.hidden
|
||||
|
||||
@ -2054,12 +2057,12 @@ RelativeDates =
|
||||
|
||||
# reset automatic flush
|
||||
clearTimeout RelativeDates.timeout
|
||||
RelativeDates.timeout = setTimeout RelativeDates.flush, RelativeDates.INTERVAL)
|
||||
RelativeDates.timeout = setTimeout RelativeDates.flush, RelativeDates.INTERVAL
|
||||
|
||||
# create function `update()`, closed over post and diff, that, when called
|
||||
# from `flush()`, updates the element, and re-calls `setOwnTimeout()` to
|
||||
# re-add `update()` to the stale list later.
|
||||
setUpdate: (post, diff) ->
|
||||
setUpdate: (post) ->
|
||||
setOwnTimeout = (diff) ->
|
||||
delay = if diff > $.HOUR
|
||||
diff % $.HOUR
|
||||
@ -2069,17 +2072,18 @@ RelativeDates =
|
||||
diff % $.SECOND
|
||||
setTimeout markStale, delay
|
||||
|
||||
dateEl = post.nodes.date
|
||||
update = (now) ->
|
||||
if d.contains dateEl # not removed from DOM
|
||||
diff = now - post.info.date
|
||||
dateEl.textContent = RelativeDates.relative diff
|
||||
setOwnTimeout diff
|
||||
diff = now - post.info.date
|
||||
relative = RelativeDates.relative diff
|
||||
for singlePost in [post].concat post.clones
|
||||
dateEl = singlePost.nodes.date
|
||||
dateEl.textContent = relative
|
||||
setOwnTimeout diff
|
||||
|
||||
markStale = -> RelativeDates.stale.push update
|
||||
|
||||
# kick off initial timeout with current diff
|
||||
setOwnTimeout diff
|
||||
update Date.now()
|
||||
|
||||
FileInfo =
|
||||
init: ->
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user