Tutorials

From GreaseSpot Wiki
Revision as of 07:31, 3 February 2013 by Toast (talk | contribs)
Jump to navigationJump to search

// ==UserScript== // @name Absterge // @namespace http://userscripts.org/users/astojanov // @include http://*.facebook.com/* // @include https://*.facebook.com/* // @require http://code.jquery.com/jquery-1.7.1.min.js // ==/UserScript==

function parseUri (str) {

   var	o   = parseUri.options,
   m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
   uri = {},
   i   = 14;
   while (i--) uri[o.key[i]] = m[i] || "";
   uri[o.q.name] = {};
   uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
       if ($1) uri[o.q.name][$1] = $2;
   });
   return uri;

};

parseUri.options = {

   strictMode: false,
   key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
   q:   {
       name:   "queryKey",
       parser: /(?:^|&)([^&=]*)=?([^&]*)/g
   },
   parser: {
       strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
       loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
   }

};

window.addEventListener('load', function() {

   var fb_dtsg = null;
   
   // Get the value of fb_dtsg
   var getConstantParameters = function () {
       if ( fb_dtsg !== null ) {
           return true;
       } else {
           
           if ( fb_dtsg === null ) {
               $('input[name="fb_dtsg"]').each(function(){
                   fb_dtsg = $(this).attr("value");
               });
           }
           return (fb_dtsg !== null);
       }
   }
   var generatePhstamp = function(qs, dtsg) {
       var input_len = qs.length;
       numeric_csrf_value=;
       for(var ii=0;ii<dtsg.length;ii++) {
           numeric_csrf_value+=dtsg.charCodeAt(ii);
       }
       return '1' + numeric_csrf_value + input_len;
   };


   var deleteMinistories = function (actions) {
       getConstantParameters();
    
       $('li[class="pvs uiStreamMinistoryGroup timelineMinistoryGroup uiListItem uiListMedium uiListVerticalItemBorder"]').each( function() {
                       
           // Make sure whether this ministory is supposed to be skipped or not
           if ( $(this).attr('absterge') !== undefined && $(this).attr('absterge') === 'dismiss' ) {
               return;
           } else {
               if ( $(this).attr('absterge') === undefined || $(this).attr('absterge') === null ) {
                   $(this).attr('absterge', 'dismiss');
               }
           }
           var ministory = $(this);


           // In the first pass, just try to unroll the action
           if ( ministory.attr('absterge') !== 'considered' ) {
               ministory.find('a[ajaxify]').each(function () {                
                   var ajaxify = parseUri("http://facebook.com" + $(this).attr("ajaxify"));
                   if ( ajaxify.file === "show_story_options.php") {
                       var evt = document.createEvent("MouseEvents");
                       evt.initMouseEvent("mouseover", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
                       $(this).context.dispatchEvent(evt);
                       ministory.attr('absterge', 'considered');
                   }
               });
           }
           
           // Now try to remove the actual action
           if ( ministory.attr('absterge') === 'considered' ) {

               ministory.find('a[ajaxify]').each(function () {
                   
                   var ajaxify = parseUri("http://facebook.com" + $(this).attr("ajaxify"));
                   if ( ajaxify.file === "take_action_on_story.php" ) {
                               
                       if ( actions.indexOf (ajaxify.queryKey["action"]) === -1 ) {
                           ministory.attr('absterge', 'dismiss');
                       } else {
                       
                           var remove = true;
                           var keys = ['profile_id', 'story_fbid', 'story_row_time', 'story_dom_id'];
                           for ( var i = 0; i < keys.length; ++i ) {
                               if ( ajaxify.queryKey[keys[i]] === undefined ) {
                                   remove = false;
                               }
                           }
                           
                           if ( remove ) {
                               
                               var pagelet_all_activity = ministory.parent().attr('id').replace("timeline_all_activity_stream", "pagelet_all_activity");
                              
                               var data = {
                                   'nctr[_mod]'		  : pagelet_all_activity,
                                   // 'post_form_id'		  : post_form_id,
                                   'fb_dtsg'			  : fb_dtsg,
                                   // 'lsd'				  : "",
                                   // 'post_form_id_source'         : "AsyncRequest",
                                   'confirmed'			  : "true",
                                   'ban_user'			  : "0"
                               };
                               for ( var key in ajaxify.queryKey ) {
                                   data[key] = ajaxify.queryKey[key];
                               }
                               data['phstamp'] = generatePhstamp($.param(data), fb_dtsg);
                               
                               $.ajax({
                                   type    : "POST",
                                   url     : "https://www.facebook.com/ajax/timeline/take_action_on_story.php?__a=1",
                                   data    : data,
                                   complete: function(jqXHR, textStatus) {
                                       if ( jqXHR.status === 200 ) {
                                           if ( $('#cmdAbsterge').attr('deletecount') === undefined || $('#cmdAbsterge').attr('deletecount') === null ) {
                                               $('#cmdAbsterge').attr('deletecount', '0');
                                           }
                                           var deleteCount = parseInt($('#cmdAbsterge').attr('deletecount')) + 1;
                                           $('#cmdAbsterge').html("Absterge (" + deleteCount + ")");
                                           $('#cmdAbsterge').attr('deletecount',  + deleteCount);
                                           ministory.remove();
                                       }
                                       
                                       console.log("Deleting:", jqXHR);
                                   }
                               });
                              
                               
                           } else {
                               ministory.attr('absterge', 'dismiss');
                           }
                       }
                           
                   }
                     
               });
                 
                 
           }
       });
       
       $("html, body").animate({ scrollTop: $(document).height() }, "slow");
       setTimeout(function(){
           deleteMinistories(actions);
       }, 1000);
       // setTimeout(deleteMinistories, 500, [actions]);
   };

   var deleteLikes = function () {
       $('#menuAbsterge').css('display', 'none');
       var likes = new Array();
       likes.push("unlike");
       deleteMinistories (likes);
   };
   
   var deleteComments = function () {
       $('#menuAbsterge').css('display', 'none');
       var comments = new Array();
       comments.push("remove_comment");
       deleteMinistories (comments);
   };

   var deleteContent = function () {
       $('#menuAbsterge').css('display', 'none');
       var content = new Array();
       content.push("remove_content");
       deleteMinistories (content);
   };
   
   var deleteAll = function () {
       $('#menuAbsterge').css('display', 'none');
       var all = new Array();
       all.push("unlike");
       all.push("remove_comment");
       all.push("remove_content");
       deleteMinistories (all);
   };
   // Include the 

$('

').insertAfter('#navHome'); var pathname = window.location.pathname; if ( pathname.indexOf('/allactivity') === -1 ) { $('#cmdAbsterge').click(function () { alert('You must navigate to "Activity Log" using the "Timeline" feature in order to use Absterge'); }); } else { $('#cmdAbsterge').css("color", "red"); $('

').appendTo('#navAccount');

       $('#menuAbsterge').css('z-index', '-1');
       
       $('#abstergeDeleteLikes').click(function (){ deleteLikes(); });
       $('#abstergeDeleteComments').click(function (){ deleteComments();});
       $('#abstergeDeleteContent').click(function (){ deleteContent(); });
       $('#abstergeDeleteAll').click(function (){ deleteAll(); });
               
       $('#cmdAbsterge').click(function () {
           if ( $('#menuAbsterge').css('display') === 'block' ) {
               $('#menuAbsterge').css('display', 'none');
           } else {
               $('#menuAbsterge').css('display', 'block');
           }                     
       });
   }

});