diff --git a/powerdeletesuite.js b/powerdeletesuite.js
new file mode 100644
index 0000000..282bfbb
--- /dev/null
+++ b/powerdeletesuite.js
@@ -0,0 +1,431 @@
+var pdApp;
+pdApp = {
+ init: function () {
+ document.title = $('#header-bottom-right .user a').first().text()+' | Power Delete Suite';
+ console.log('init');
+ if (window.pd_processing !== true) {
+ if (document.location.href.match('/user/') && $('.titlebox h1').first().text() === $('#header-bottom-right .user a').first().text()) {
+ pdApp.config = {
+ uh : $('#config').innerHTML ?
+ $('#config').innerHTML.replace(/.*?modhash.{1}: .{1}/,'').replace(/[^a-z0-9].*/,'') :
+ $('#config')[0].innerHTML.replace(/.*?modhash.{1}: .{1}/,'').replace(/[^a-z0-9].*/,''),
+ user : $('#header-bottom-right .user a').first().text()
+ };
+ pdApp.prepDom();
+ pdApp.bindUI();
+ pdApp.parseSettings();
+ } else {
+ if (confirm('This script is designed to be run from your own user profile. Would you like to navigate there?')) {
+ document.location = 'http://reddit.com/u/'+ $('#header-bottom-right .user a').first().text();
+ }
+ }
+ }
+ },
+ prepDom: function () {
+ $('.sitetable,.neverEndingReddit').remove();
+ $('#pd__central,#pd__style').html(''); /*Debugging*/
+ if ($('#pd__central').length === 0) {
+ $('body>.content[role=\'main\']').append('
');
+ }
+ if ($('#pd__style').length === 0) {
+ $('head').first().append('');
+ }
+ pdApp.prepStyles();
+ pdApp.prepCentral();
+
+ $('#pd__central').wrapInner('');
+ },
+ prepStyles: function () {
+ var s = $('#pd__style')[0];
+ s.innerHTML += '#pd__central {background:#fff; padding:20px; margin:20px; border:1px solid #ddd; border-radius:1em; margin-right:320px; line-height:2em}';
+ s.innerHTML += '.xt {display:none} .xt:checked+label+.xt {display: block}';
+ s.innerHTML += '.xt+label::after {content:\'+\'; color: #09f; font-weight:bold; margin-left:.2em} .xt:checked+label::after {content:\'-\'}';
+ s.innerHTML += '.xt.xtr {display:inline-block}';
+ s.innerHTML += '.ind {margin-left:1em !important}';
+ s.innerHTML += '#pd__central input[type=\'checkbox\'] {position:relative; top:3px; margin-right:.5em}';
+ s.innerHTML += 'b.m {color:#590;margin-right:.4em;}';
+ s.innerHTML += '#pd__central a{cursor:pointer}';
+ s.innerHTML += '#pd__sub-list{max-height:20em;overflow-y:auto; background: #eee}';
+ s.innerHTML += '#pd__central textarea {width:100%; min-height: 3em;}';
+ s.innerHTML += '#pd__central .label {text-align:center; display:block}';
+ s.innerHTML += '#pd__central .progress {height: 2em;border: 1px solid #ccc;border-radius: 0.5em; margin-bottom: 1em; position: relative}';
+ s.innerHTML += '#pd__central .bar, #pd__central .text {position:absolute; left:0; top:0; height:100%; display:block}';
+ s.innerHTML += '#pd__central .bar {background: #def; z-index:0;}';
+ s.innerHTML += '#pd__central .text {z-index:1; text-align: center; width: 100%;}';
+ },
+ prepCentral: function () {
+ var c = $('#pd__central');
+ c.append('Power Delete Suite
');
+ c.append('Please review all options before pressing \'Process\'. This process is NOT reversible.
');
+ c.append('
');
+
+ c.append('Actions to perform
');
+ c.append('');
+ c.append('');
+ c.append(' ');
+ c.append('
');
+
+ c.append('Filters
');
+ c.append('');
+ c.append('');
+ c.append('');
+ if ($('#side-mod-list').length > 0) {
+ c.append('');
+ }
+ c.append('
');
+
+ c.append('');
+ pdApp.prepSubs();
+ },
+ prepSubs: function () {
+ var sub_arr = [], i, sid;
+ $('#per-sr-karma tbody th').each(function () {
+ sub_arr.push($(this).text());
+ });
+ sub_arr = sub_arr.sort(function (a, b) {
+ return a.toLowerCase().localeCompare(b.toLowerCase());
+ });
+ for (i=0;i');
+ }
+ $('#side-mod-list li').each(function() {
+ $('.sub--'+$(this).text().replace('/r/','')).prepend('[M]');
+ });
+
+ if (! localStorage.getItem('pd_storage')) {
+ $('#pd__sub-list input').prop('checked',true);
+ }
+ },
+ bindUI: function() {
+ $('.pd__q').click(function(e) {e.preventDefault(); alert($(this).closest('[data-help]').attr('data-help'));});
+ $('#pd__form').submit(function(e) {
+ e.preventDefault();
+ pdApp.saveSettings();
+ pdApp.process.init();
+ });
+ },
+ parseSettings: function () {
+ if (localStorage.getItem('pd_storage')) {
+ var i, temp_arr = JSON.parse(localStorage.getItem('pd_storage'));
+ $('#pd__form input').prop('checked',false).val('');
+ for (i=0;i 0) {
+ $('#pd__central').html('');
+ $('#pd__central').append('Power Delete Suite
');
+ $('#pd__central').append('Page Progress');
+ $('#pd__central').append('
');
+ $('#pd__central').append('Page Item Progress');
+ $('#pd__central').append('
');
+ }
+
+ if (pdApp.processInfo.submission_pages > 0) {
+ pdApp.process.submissions.init();
+ } else if (pdApp.processInfo.comment_pages > 0) {
+ pdApp.process.comments.init();
+ } else {
+ alert('Well, there\'s nothing to do, so I guess we\'re done? Try enabling one of the actions next time!');
+ }
+ },
+ updateDisplay: function () {
+ if (pdApp.processInfo.num_pages<=pdApp.processInfo.done_pages) {
+ pdApp.processInfo.num_pages = pdApp.processInfo.done_pages + 1;
+ }
+ $('#progress_page .bar').css('width',(Math.round(1000*pdApp.processInfo.done_pages/pdApp.processInfo.num_pages)/10)+'%');
+ $('#progress_page .text').text(pdApp.processInfo.done_pages + ' / ' + pdApp.processInfo.num_pages);
+ if (pdApp.processInfo.num_individual > 0) {
+ $('#progress_item .bar').css('width',(Math.round(1000*pdApp.processInfo.done_individual/pdApp.processInfo.num_individual)/10)+'%');
+ $('#progress_item .text').text(pdApp.processInfo.done_individual + ' / ' + pdApp.processInfo.num_individual);
+ }
+
+ var main_percent = pdApp.processInfo.done_pages/pdApp.processInfo.num_pages,
+ main_diff = (pdApp.processInfo.done_pages+1)/pdApp.processInfo.num_pages - main_percent,
+ sub_percent = pdApp.processInfo.num_individual > 0 ? main_diff*(pdApp.processInfo.done_individual/(pdApp.processInfo.num_individual+1)) : 0;
+
+ main_percent += sub_percent;
+ document.title = pdApp.config.user + ' | ' + pdApp.processInfo.ajax_calls;
+ },
+ submissions: {
+ init: function () {
+ console.log(pdApp.processInfo.prev_submit_ignored,pdApp.processInfo.this_submit_ignored);
+ if (pdApp.processInfo.prev_submit_ignored !== pdApp.processInfo.this_submit_ignored) {
+ pdApp.processInfo.prev_submit_ignored = pdApp.processInfo.this_submit_ignored;
+ pdApp.processInfo.this_submit_ignored = 0;
+ pdApp.processInfo.submitPage = true;
+ pdApp.processInfo.searchPage = true;
+ pdApp.process.submissions.checkSubmitted();
+ } else {
+ pdApp.process.comments.init();
+ }
+ },
+ checkSubmitted: function () {
+ pdApp.process.updateDisplay();
+ pdApp.processInfo.ajax_calls ++;
+ $.ajax({
+ url: 'https://www.reddit.com/user/'+pdApp.config.user+'/submitted/.json'+(pdApp.processInfo.after ? '?after='+pdApp.processInfo.after : '')
+ }).then(function(resp) {
+ pdApp.processInfo.done_pages ++;
+ if (resp.data.children.length > 0) {
+ pdApp.processInfo.num_pages ++;
+ pdApp.process.handle.items(resp.data.children);
+ } else {
+ pdApp.processInfo.after = false;
+ pdApp.processInfo.submitPage = false;
+ pdApp.process.submissions.checkSearch();
+ }
+ }, function(resp) {
+ console.error(resp);
+ });
+ },
+ checkSearch: function () {
+ pdApp.process.updateDisplay();
+ pdApp.processInfo.ajax_calls ++;
+ $.ajax({
+ url: 'https://www.reddit.com/search.json?q=author%3A'+pdApp.config.user+(pdApp.processInfo.after ? '&after='+pdApp.processInfo.after : '')
+ }).then(function(resp) {
+ pdApp.processInfo.done_pages ++;
+ if (resp.data.children.length > 0) {
+ pdApp.processInfo.num_pages ++;
+ pdApp.process.handle.items(resp.data.children);
+ } else {
+ pdApp.processInfo.after = false;
+ pdApp.processInfo.searchPage = false;
+ pdApp.process.comments.init();
+ }
+ }, function(resp) {
+ console.error(resp);
+ });
+ }
+ },
+ comments: {
+ init: function () {
+ if (pdApp.config.settings['comments-edit'] || pdApp.config.settings['comments']) {
+ if (pdApp.processInfo.prev_comment_ignored !== pdApp.processInfo.this_comment_ignored) {
+ pdApp.processInfo.prev_comment_ignored = pdApp.processInfo.this_comment_ignored;
+ pdApp.processInfo.this_comment_ignored = 0;
+ pdApp.processInfo.commentPage = true;
+ pdApp.process.comments.checkComments();
+ } else {
+ pdApp.done();
+ }
+ } else {
+ pdApp.done();
+ }
+ },
+ checkComments: function () {
+ pdApp.process.updateDisplay();
+ pdApp.processInfo.ajax_calls ++;
+ $.ajax({
+ url: 'https://www.reddit.com/user/'+pdApp.config.user+'/comments/.json'+(pdApp.processInfo.after ? '?after='+pdApp.processInfo.after : '')
+ }).then(function(resp) {
+ pdApp.processInfo.done_pages ++;
+ if (resp.data.children.length > 0) {
+ pdApp.processInfo.num_pages ++;
+ pdApp.process.handle.items(resp.data.children);
+ } else {
+ pdApp.processInfo.after = false;
+ pdApp.processInfo.commentPage = false;
+ pdApp.done();
+ }
+ }, function(resp) {
+ console.error(resp);
+ });
+ }
+ },
+ handle: {
+ items: function (data) {
+ pdApp.process.updateDisplay();
+ pdApp.processInfo.done_individual = 0;
+ pdApp.processInfo.num_individual = data.length;
+ pdApp.processInfo.pageSize = data.length;
+ window.currentItems = data;
+ pdApp.process.handle.item(window.currentItems[0], false);
+ },
+ next: function (item,edited,callIgnored) {
+ pdApp.processInfo.done_individual ++;
+ window.currentItems.shift();
+ pdApp.process.handle.item(window.currentItems[0], edited);
+ if (callIgnored) {
+ pdApp.process.handle.updateIgnored(item);
+ }
+ },
+ updateIgnored: function (item) {
+ if (item.kind === 't1') {
+ pdApp.processInfo.this_comment_ignored ++;
+ } else {
+ pdApp.processInfo.this_submit_ignored ++;
+ }
+ pdApp.processInfo.after = item.data.name;
+ },
+ item : function (item,edited) {
+ if (item) {
+ pdApp.process.updateDisplay();
+ var settings = pdApp.config.settings;
+ window.settings = settings;
+ if (!settings.subreddits || (settings.subfilters.indexOf(item.data.subreddit) >= 0)) {
+ if (!settings.gilded || item.data.gilded === 0) {
+ if (!settings.saved || item.data.saved === false) {
+ if (!settings.mod || !item.data.distinguished) {
+ if ((edited === false && settings['comments-edit']) &&
+ (item.kind === 't1' || item.data.is_self)) {
+ pdApp.processInfo.ajax_calls ++;
+ window.firstDone = false;
+ $.ajax({
+ url: 'https://www.reddit.com/api/editusertext',
+ method: 'post',
+ data: {
+ thing_id: item.data.name,
+ text: settings['comments-edit-text'],
+ id: '#form-'+item.data.name,
+ r: item.data.subreddit,
+ uh: pdApp.config.uh,
+ renderstyle: 'html'
+ }
+ }).then(function() {
+ if (settings['comments'] || settings['submissions']) {
+ pdApp.process.handle.next(item,true,false);
+ } else {
+ pdApp.process.handle.next(item,false,false);
+ }
+ }, function (resp) {
+ console.error(resp);
+ });
+ } else if (settings['comments'] || settings['submissions']) {
+ pdApp.processInfo.ajax_calls ++;
+ window.firstDone = false;
+ $.ajax({
+ url: 'https://www.reddit.com/api/del',
+ method: 'post',
+ data: {
+ id: item.data.name,
+ executed: 'deleted',
+ uh: pdApp.config.uh,
+ renderstyle: 'html'
+ }
+ }).then(function() {
+ pdApp.process.handle.next(item,false,false);
+ }, function (resp) {
+ console.error(resp);
+ });
+ } else {
+ pdApp.process.handle.next(item,false,true);
+ }
+ } else {
+ pdApp.process.handle.next(item,false,true);
+ }
+ } else {
+ pdApp.process.handle.next(item,false,true);
+ }
+ } else {
+ pdApp.process.handle.next(item,false,true);
+ }
+ } else {
+ pdApp.process.handle.next(item,false,true);
+ }
+ } else {
+ pdApp.process.updateDisplay();
+ if (pdApp.processInfo.submitPage) {
+ if (pdApp.processInfo.this_submit_ignored === 0 && pdApp.processInfo.pageSize > 0) {
+ pdApp.processInfo.after = false;
+ }
+ pdApp.process.submissions.checkSubmitted();
+ } else if (pdApp.processInfo.searchPage) {
+ if (pdApp.processInfo.this_submit_ignored === 0 && pdApp.processInfo.pageSize > 0) {
+ pdApp.processInfo.after = false;
+ }
+ pdApp.process.submissions.checkSearch();
+ } else if (pdApp.processInfo.commentPage) {
+ if (pdApp.processInfo.this_comment_ignored === 0 && pdApp.processInfo.pageSize > 0) {
+ pdApp.processInfo.after = false;
+ }
+ pdApp.process.comments.checkComments();
+ } else {
+ pdApp.done();
+ }
+ }
+ }
+ }
+ },
+ done: function () {
+ if (pdApp.processInfo.prev_submit_ignored !== pdApp.processInfo.this_submit_ignored ||
+ pdApp.processInfo.prev_comment_ignored !== pdApp.processInfo.this_comment_ignored) {
+ if (pdApp.processInfo.submission_pages > 0) {
+ pdApp.process.submissions.init();
+ } else if (pdApp.processInfo.comment_pages > 0) {
+ pdApp.process.comments.init();
+ }
+ } else {
+ window.pd_processing = false;
+ $('#pd__central').html('');
+ $('#pd__central').append('Power Delete Suite
');
+ $('#pd__central').append('Completed after making '+pdApp.processInfo.ajax_calls+' calls to the reddit servers.
');
+ $('#pd__central').append('If you need to re run the script, just click the bookmarklet again!
');
+ document.title = $('#header-bottom-right .user a').first().text()+' | Power Delete Suite';
+ }
+ }
+};
+pdApp.init();