From c51ac3bafe28c61a13e1718ccbabd28217197457 Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Thu, 27 Aug 2020 06:07:05 -0400 Subject: [PATCH] shadowban robustness --- .../block/JsUserBlockerRuleDriver.js.hbs | 33 ++++++++++++++----- .../bubble/rule/social/block/site/FB.js.hbs | 14 +++++--- utils/cobbzilla-utils | 2 +- 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/bubble-server/src/main/resources/bubble/rule/social/block/JsUserBlockerRuleDriver.js.hbs b/bubble-server/src/main/resources/bubble/rule/social/block/JsUserBlockerRuleDriver.js.hbs index 441dc4df..92245cb0 100644 --- a/bubble-server/src/main/resources/bubble/rule/social/block/JsUserBlockerRuleDriver.js.hbs +++ b/bubble-server/src/main/resources/bubble/rule/social/block/JsUserBlockerRuleDriver.js.hbs @@ -5,6 +5,20 @@ let {{JS_PREFIX}}_interval = null; let {{JS_PREFIX}}_last_applied = null; const {{JS_PREFIX}}_idle_interval = 2500; +const {{JS_PREFIX}}_stop_refreshing_blocks = function(e) { + if ({{JS_PREFIX}}_interval !== null) { + window.clearInterval({{JS_PREFIX}}_interval); + } +} +const {{JS_PREFIX}}_refresh_blocks = function(e) { + {{JS_PREFIX}}_stop_refreshing_blocks(); + {{JS_PREFIX}}_apply_blocks({{JS_PREFIX}}_blocked_users); + {{JS_PREFIX}}_interval = window.setInterval(function () { + {{JS_PREFIX}}_apply_blocks({{JS_PREFIX}}_blocked_users); + {{JS_PREFIX}}_last_applied = Date.now(); + }, {{JS_PREFIX}}_idle_interval); +} + function {{JS_PREFIX}}_fetch_blocks (do_apply) { const requestOptions = { method: 'GET' }; const blocked_users_url = '/__bubble/api/filter/data/{{BUBBLE_DATA_ID}}/read'; @@ -26,16 +40,17 @@ function {{JS_PREFIX}}_fetch_blocks (do_apply) { }); } -window.addEventListener('popstate', function(e) { - if ({{JS_PREFIX}}_interval !== null) { - window.clearInterval({{JS_PREFIX}}_interval); +window.addEventListener('popstate', {{JS_PREFIX}}_refresh_blocks); + +function {{JS_PREFIX}}_handleVisibilityChange() { + if (document.hidden) { + {{JS_PREFIX}}_stop_refreshing_blocks(); + } else { + {{JS_PREFIX}}_refresh_blocks(); } - {{JS_PREFIX}}_apply_blocks({{JS_PREFIX}}_blocked_users); - {{JS_PREFIX}}_interval = window.setInterval(function () { - {{JS_PREFIX}}_apply_blocks({{JS_PREFIX}}_blocked_users); - {{JS_PREFIX}}_last_applied = Date.now(); - }, {{JS_PREFIX}}_idle_interval); -}); +} + +document.addEventListener("visibilitychange", {{JS_PREFIX}}_handleVisibilityChange, false); function {{JS_PREFIX}}_block_user (author) { {{JS_PREFIX}}_blocked_users.push(author); diff --git a/bubble-server/src/main/resources/bubble/rule/social/block/site/FB.js.hbs b/bubble-server/src/main/resources/bubble/rule/social/block/site/FB.js.hbs index 02728088..8cf60678 100644 --- a/bubble-server/src/main/resources/bubble/rule/social/block/site/FB.js.hbs +++ b/bubble-server/src/main/resources/bubble/rule/social/block/site/FB.js.hbs @@ -23,14 +23,18 @@ function {{JS_PREFIX}}_author_display_name(link) { return spans[spans.length-1]; } +function {{JS_PREFIX}}_find_feed_item(article) { + return {{JS_PREFIX}}_mobile + ? article + : article.parentElement.parentElement.parentElement.parentElement.parentElement; // todo: safer to walk upwards until we find FeedItem +} + function {{JS_PREFIX}}_remove_article(article, authorName) { if (article.className.indexOf('{{JS_PREFIX}}_bub_blocked') === -1) { log('removing post by author: ' + authorName); article.className = article.className += ' {{JS_PREFIX}}_bub_blocked'; try { - const feedItem = {{JS_PREFIX}}_mobile - ? article - : article.parentElement.parentElement.parentElement.parentElement.parentElement; // todo: safer to walk upwards until we find FeedItem + const feedItem = {{JS_PREFIX}}_find_feed_item(article); feedItem.parentElement.removeChild(feedItem); } catch (e) { log('error removing post by author: ' + authorName + ': ' + e); @@ -56,13 +60,13 @@ function {{JS_PREFIX}}_create_block_control(article, authorName) { const blockLink = document.createElement('a'); blockLink.style.zIndex = '{{APP_CONTROLS_Z_INDEX}}' blockLink.addEventListener("click", function (e) { - {{JS_PREFIX}}_block_user(authorName); try { - const feedItem = article.parentElement.parentElement.parentElement.parentElement.parentElement; + const feedItem = {{JS_PREFIX}}_find_feed_item(article); feedItem.parentElement.removeChild(feedItem); } catch (e) { log('click error removing post by author: ' + authorName + ': ' + e); } + {{JS_PREFIX}}_block_user(authorName); e.stopPropagation(); e.preventDefault(); return false; diff --git a/utils/cobbzilla-utils b/utils/cobbzilla-utils index 73fdb7cb..3de70e3b 160000 --- a/utils/cobbzilla-utils +++ b/utils/cobbzilla-utils @@ -1 +1 @@ -Subproject commit 73fdb7cb6320f43d267b16330f7c08bfd3eab93c +Subproject commit 3de70e3b1e5109a0d1bf41e8d6e73358236d5e8f