From c64bb3c361b9dd273c123422ab7daa3fb2b2c601 Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Fri, 28 Sep 2012 00:47:39 +0200 Subject: [PATCH] More accurate QR/post deletion cooldown. Close #774. --- 4chan_x.user.js | 35 ++++++++++++++++++++++------------- script.coffee | 42 ++++++++++++++++++++++++++---------------- 2 files changed, 48 insertions(+), 29 deletions(-) diff --git a/4chan_x.user.js b/4chan_x.user.js index 25c91a019..0c43e8735 100644 --- a/4chan_x.user.js +++ b/4chan_x.user.js @@ -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) { diff --git a/script.coffee b/script.coffee index 16542976c..b7c6e8a8e 100644 --- a/script.coffee +++ b/script.coffee @@ -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'