More accurate QR/post deletion cooldown. Close #774.

This commit is contained in:
Nicolas Stepien 2012-09-28 00:47:39 +02:00
parent 3ef78f8461
commit c64bb3c361
2 changed files with 48 additions and 29 deletions

View File

@ -1836,29 +1836,36 @@
},
cooldown: {
init: function() {
var length, timeout, _ref;
if (!Conf['Cooldown']) {
return;
}
QR.cooldown.start($.get("/" + g.BOARD + "/cooldown", 0));
_ref = $.get("/" + g.BOARD + "/cooldown", {}), timeout = _ref.timeout, length = _ref.length;
if (timeout) {
QR.cooldown.start(timeout, length);
}
return $.sync("/" + g.BOARD + "/cooldown", QR.cooldown.start);
},
start: function(timeout) {
start: function(timeout, length) {
var seconds;
seconds = Math.floor((timeout - Date.now()) / 1000);
return QR.cooldown.count(seconds);
return QR.cooldown.count(seconds, length);
},
set: function(seconds) {
if (!Conf['Cooldown']) {
return;
}
QR.cooldown.count(seconds);
return $.set("/" + g.BOARD + "/cooldown", Date.now() + seconds * $.SECOND);
QR.cooldown.count(seconds, seconds);
return $.set("/" + g.BOARD + "/cooldown", {
timeout: Date.now() + seconds * $.SECOND,
length: seconds
});
},
count: function(seconds) {
if (!((0 <= seconds && seconds <= 60))) {
count: function(seconds, length) {
if (!((0 <= seconds && seconds <= length))) {
return;
}
setTimeout(QR.cooldown.count, 1000, seconds - 1);
setTimeout(QR.cooldown.count, 1000, seconds - 1, length);
QR.cooldown.seconds = seconds;
if (seconds === 0) {
$["delete"]("/" + g.BOARD + "/cooldown");
@ -2548,7 +2555,7 @@
} else {
QR.cooldown.auto = QR.replies.length > 1;
sage = /sage/i.test(reply.email);
seconds = g.BOARD === 'q' ? reply.file ? 300 : sage ? 600 : 60 : sage ? 60 : 30;
seconds = g.BOARD === 'q' ? sage ? 600 : reply.file ? 300 : 60 : sage ? 60 : 30;
QR.cooldown.set(seconds);
if (Conf['Open Reply in New Tab'] && !g.REPLY && !QR.cooldown.auto) {
$.open("//boards.4chan.org/" + g.BOARD + "/res/" + threadID + "#p" + postID);
@ -4331,14 +4338,16 @@
},
cooldown: {
start: function(e) {
return DeleteLink.cooldown.count(e.detail.postID, 30);
var seconds;
seconds = g.BOARD === 'q' ? 600 : 30;
return DeleteLink.cooldown.count(e.detail.postID, seconds, seconds);
},
count: function(postID, seconds) {
count: function(postID, seconds, length) {
var el;
if (!((0 <= seconds && seconds <= 30))) {
if (!((0 <= seconds && seconds <= length))) {
return;
}
setTimeout(DeleteLink.cooldown.count, 1000, postID, seconds - 1);
setTimeout(DeleteLink.cooldown.count, 1000, postID, seconds - 1, length);
el = DeleteLink.cooldown.el;
if (seconds === 0) {
if (el != null) {

View File

@ -1418,18 +1418,21 @@ QR =
cooldown:
init: ->
return unless Conf['Cooldown']
QR.cooldown.start $.get "/#{g.BOARD}/cooldown", 0
{timeout, length} = $.get "/#{g.BOARD}/cooldown", {}
QR.cooldown.start timeout, length if timeout
$.sync "/#{g.BOARD}/cooldown", QR.cooldown.start
start: (timeout) ->
start: (timeout, length) ->
seconds = Math.floor (timeout - Date.now()) / 1000
QR.cooldown.count seconds
QR.cooldown.count seconds, length
set: (seconds) ->
return unless Conf['Cooldown']
QR.cooldown.count seconds
$.set "/#{g.BOARD}/cooldown", Date.now() + seconds*$.SECOND
count: (seconds) ->
return unless 0 <= seconds <= 60
setTimeout QR.cooldown.count, 1000, seconds-1
QR.cooldown.count seconds, seconds
$.set "/#{g.BOARD}/cooldown",
timeout: Date.now() + seconds * $.SECOND
length: seconds
count: (seconds, length) ->
return unless 0 <= seconds <= length
setTimeout QR.cooldown.count, 1000, seconds-1, length
QR.cooldown.seconds = seconds
if seconds is 0
$.delete "/#{g.BOARD}/cooldown"
@ -2001,12 +2004,14 @@ QR =
QR.cooldown.auto = QR.replies.length > 1
sage = /sage/i.test reply.email
seconds =
# 300 seconds cooldown for new threads
# q: 86400 seconds
# b soc r9k: 600 seconds
if g.BOARD is 'q'
# that makes no sense.png
if reply.file
300
else if sage
if sage
600
else if reply.file
300
else
60
else if sage
@ -3566,10 +3571,15 @@ DeleteLink =
cooldown:
start: (e) ->
DeleteLink.cooldown.count e.detail.postID, 30
count: (postID, seconds) ->
return unless 0 <= seconds <= 30
setTimeout DeleteLink.cooldown.count, 1000, postID, seconds-1
seconds =
if g.BOARD is 'q'
600
else
30
DeleteLink.cooldown.count e.detail.postID, seconds, seconds
count: (postID, seconds, length) ->
return unless 0 <= seconds <= length
setTimeout DeleteLink.cooldown.count, 1000, postID, seconds-1, length
{el} = DeleteLink.cooldown
if seconds is 0
el?.textContent = 'Delete'