Snippets

killerspaz UserScript - Delete All Reddit Comments

Created by killerspaz

File spaz_reddit_delete.js Added

  • Ignore whitespace
  • Hide word diff
+// ==UserScript==
+// @name        Spaz's Reddit Delete
+// @namespace   Reddit
+// @include     http*://*.reddit.com/user/*
+// @version     1
+// @description Replaces all VISIBLE comments with garbage text, then deletes the comment. Works with RES!
+// ==/UserScript==
+
+RD = unsafeWindow.RedditDelete = {};
+RD.DELAY_SAVE   = 2 * 1000;
+RD.DELAY_DELETE = 3 * 1000;
+RD.chars      = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz><.-,+!@#$%^&*();:[]~';
+RD.started    = false;
+
+function __getRNGString(maxLength) {
+  var rnum, repl_str = '';
+
+  for (var x = 0; x < maxLength; x++){
+    rnum = Math.floor(Math.random() * RD.chars.length);
+    repl_str += RD.chars.charAt(rnum, 1);
+  }
+
+  return repl_str;
+}
+
+function _setupEnv() {
+  if (RD.started) return;
+
+  RD.numDel       = 0;
+  RD.contentCtnr  = document.querySelector('div.content');
+  RD.infoBar      = document.createElement('span');
+  RD.userName     = document.querySelector('span.user > a:not(.login-required)').innerHTML;
+  RD.infoBar.setAttribute('class', 'nextprev');
+  RD.started      = true;
+}
+
+function _setupUI() {
+  //Build DELETE-ALL Link
+  var delAllLink        = document.createElement('a');
+  delAllLink.innerHTML  = 'SECURE DELETE ALL COMMENTS';
+  delAllLink.onclick    = _promptDeleteAll;
+  delAllLink.style.cssText = "color: rgb(200, 0, 0); text-shadow: -1px 0px 6px rgba(0,0,0, 0.7);";
+
+  //Add to infoBar!
+  RD.infoBar.appendChild(delAllLink);
+  RD.contentCtnr.insertBefore(RD.infoBar, RD.contentCtnr.firstChild);
+}
+
+function _promptDeleteAll() {
+  var doDelete = confirm("Are you sure you want to delete all comments on the screen?\n\n"
+    + "ProTip: If you want to delete ALL, use RES and use 'Never Ending Reddit' feature to show ALL comments.");
+
+  if (!doDelete) return;
+
+  _deleteAll();
+}
+
+function _deleteAll() {
+  var modalCntr = RD.modalCntr = document.createElement('div');
+  var modalMsg  = RD.modalMsg  = document.createElement('div');
+  var cancelBtn  = document.createElement('button');
+  modalCntr.style.cssText = ''
+   + 'position: fixed; top: 0; left: 0; right: 0; bottom: 0;'
+   + 'height: 100%; width: 100%; background: rgba(0,0,0,0.8);'
+
+  modalMsg.style.cssText = ''
+   + 'position: absolute; font-size: 32px; transform: translateX(-50%); top: 50%; left: 50%;'
+
+  cancelBtn.style.cssText = ''
+   + 'position: absolute; font-size: 22px;'
+   + 'transform: translateX(-50%); top: 63%; left: 50%;'
+
+  cancelBtn.innerHTML = "Cancel";
+  cancelBtn.onclick = function() {
+    RD.modalMsg.innerHTML = "Cancelling..."
+    RD.numDel = RD.comments.length;
+  }
+
+  RD.comments = __getVisibleComments();
+  RD.numDel     = 0;
+
+  modalCntr.appendChild(modalMsg);
+  modalCntr.appendChild(cancelBtn);
+  document.body.appendChild(modalCntr);
+
+  __deleteCommentIndex(0);
+}
+
+function __getVisibleComments() {
+  var foundComments = [];
+
+  var entries     = RD.contentCtnr.querySelectorAll('.entry.likes');
+  var entry       = null;
+  var entryAuthor = '';
+
+  for (var idx = 0; idx < entries.length; idx++) {
+    entry = entries[idx];
+    entryAuthor = entry.querySelector('.author');
+
+    if (!entryAuthor || entryAuthor.innerHTML !== RD.userName) continue;
+
+    foundComments.push(entry);
+  };
+
+  return foundComments;
+}
+
+function __deleteCommentIndex(idx) {
+  var comment = RD.comments[idx];
+
+  __overwriteComment(comment, function(comment) {
+    __deleteComment(comment, function() {
+      var complete = RD.numDel >= RD.comments.length;
+      if (false === complete) {
+        RD.numDel++;
+        __deleteCommentIndex(RD.numDel);
+      } else {
+        window.location.reload();
+      }
+    });
+  });
+}
+
+function __overwriteComment(comment, callback) {
+  var editLink = comment.querySelector('.edit-usertext');
+  var editText, newText, saveLink;
+
+  RD.modalMsg.innerHTML = 'Overwriting ' + (RD.numDel + 1) + ' of ' + RD.comments.length + '...';
+
+  if (!editLink) { if (callback) callback(comment); return; }
+
+  //Enable editing...
+  editLink.click();
+  editText = comment.querySelector('textarea');
+  saveBtn = comment.querySelector('.usertext-buttons .save');
+
+  //Replace Text with RNG string
+  newText         = __getRNGString(editText.value.length);
+  editText.value  = newText;
+
+  //Do the save...
+  saveBtn.click();
+  setTimeout(function() { if (callback) callback(comment); }, RD.DELAY_SAVE);
+}
+
+function __deleteComment(comment, callback) {
+  RD.modalMsg.innerHTML = 'Deleting ' + (RD.numDel + 1) + ' of ' + RD.comments.length + '...';
+
+  var deleteLink = comment.querySelector('form.del-button .togglebutton')
+  var yesLink;
+
+  //Enable deleting...
+  deleteLink.click();
+  yesLink = comment.querySelector('.option.error.active a.yes');
+
+  if (!yesLink) { if (callback) callback(); return; }
+
+  //Delay clicking YES so the user can see it
+  setTimeout(function() {
+    //Do the delete...
+    yesLink.click();
+    setTimeout(function() { if (callback) callback(); }, RD.DELAY_DELETE);
+  }, 250);
+}
+
+(function() {
+  _setupEnv();
+  _setupUI();
+})();
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.