- // ==UserScript==
- // @name Facebook add Block App to Newsfeed
- // @version 1.7.6
- // @namespace 81e39bcf0fc5f8bc9fbf174299021d6d
- // @description Adds block app link to your Facebook newsfeed after each application posted on your feed.
- // @license GNU General Public License version 3 or any later version; https://www.gnu.org/licenses/gpl-3.0.html
- // @include https://*.facebook.com/*
- // @include http://*.facebook.com/*
- // @exclude https://apps.facebook.com/ai.php
- // @exclude http://apps.facebook.com/ai.php
- // @grant none
- // @icon https://monkeyguts.com/icon/119.png
- // ==/UserScript==
- //Thanks to Mesak (http://userscripts.org/users/mesak) for parts of this
- var runtimes = 0;
- function checkDocT(){
- checkDoc(undefined);
- }
- function checkDoc(event){
- try {
- var target = document;
- var uri = document.baseURI;
- if(event){
- target = event.target;
- if(!target || target == '[object HTMLScriptElement]' || target == '[object Text]'){
- return;
- }
- uri = target.baseURI;
- }
-
- if(uri.indexOf('/ai.php') != -1 || uri.indexOf('/apps/application.php?id=') != -1){
- return;
- }
- var aLinkElement = target.getElementsByTagName('a');
- var len = aLinkElement.length;
- for(x=0;x<len;x++){
- var hovercard = aLinkElement[x].getAttribute('data-hovercard');
- var href = aLinkElement[x].getAttribute('href');
- var ajaxify = aLinkElement[x].getAttribute('ajaxify');
- var datagt = aLinkElement[x].getAttribute('data-gt');
- var hasblock = aLinkElement[x].getAttribute('hasblock');
- var ariahidden = aLinkElement[x].getAttribute('aria-hidden');
- var linkinner = aLinkElement[x].innerHTML;
- if(hasblock == null){
- if(hovercard !== null && hovercard.indexOf('application.php') != -1 && linkinner.indexOf('Play Now') == -1){
- if(ariahidden == null){
- addBlockIfText(aLinkElement[x], hovercard.match(/id\=(\d+)/)[1], null, null, null);
- }
- } else if(hovercard !== null && (hovercard.indexOf('/ajax/hovercard/hovercard.php?id=') != -1 || hovercard.indexOf('/ajax/hovercard/application.php?id=') != -1) && href != null && href.indexOf('://apps.facebook.com/') != -1){
- if(href.indexOf('type=discovery') != -1){
- //assume these types of hovercard.php links have app ids for their ids as in the case of 21 questions
- addBlockIfText(aLinkElement[x], hovercard.match(/id\=(\d+)/)[1], null, null, null);
- } else {
- var found = false;
- for(y=x;y>=0;y--){
- var aclass = aLinkElement[y].getAttribute('class');
- if(aclass == 'uiSelectorButton'){
- ajaxify = aLinkElement[y].getAttribute('ajaxify');
- //What about more than one?
- if(ajaxify.indexOf('hideable_ids\%5B0\%5D\=') != -1){
- addBlockIfText(aLinkElement[x], ajaxify.match(/hideable_ids\%5B0\%5D\=(\d+)/)[1], null, null, null);
- }
- break;
-
- }
- }
- if(!found){
- addBlockIfText(aLinkElement[x], hovercard.match(/id\=(\d+)/)[1], null, null, null);
- }
- }
- } else if(href !== null && datagt !== null && href.indexOf('/apps/application.php?id=') == -1 && href.indexOf('://apps.facebook.com/') != -1 && datagt.indexOf('\"appid\"') != -1){
- if(aLinkElement[x].parentNode && aLinkElement[x].parentNode.getAttribute('class').indexOf('imageContainer') == -1 && datagt.indexOf('canvas_bookmarks') == -1){
- addBlockLink(aLinkElement[x], datagt.match(/.appid.:.(\d+)/)[1], 'div', 0, 1);
- }
- } else if(href !== null && datagt !== null && href.indexOf('facebook.com/appcenter/') != -1 && datagt.indexOf('\"appid\"') != -1 && aLinkElement[x].className.indexOf('logo') == -1){
- //unsafeWindow.console.log('fb_block test=' + datagt);
- if(aLinkElement[x].parentNode && aLinkElement[x].parentNode.getAttribute('class') && aLinkElement[x].parentNode.getAttribute('class').indexOf('imageContainer') == -1 && datagt.indexOf('canvas_bookmarks') == -1){
- addBlockIfText(aLinkElement[x], datagt.match(/.appid.:.(\d+)/)[1], null, null, null);
- }
- } else if(href !== null && href.indexOf('/apps/application.php?id=') != -1){
- var httpindex = href.indexOf('http');
- var appindex = -1;
- if(httpindex == 0){
- appindex = href.indexOf('www.facebook.com/apps/application.php?id=');
- } else {
- appindex = href.indexOf('/apps/application.php?id=');
- }
- if((appindex == 7 || appindex == 8) && httpindex == 0 || appindex == 0){
- if(aLinkElement[x].parentNode.innerHTML.indexOf('Blocking') == 0 && aLinkElement[x].parentNode.parentNode.parentNode.getAttribute('class') == 'dialog_body'){
- ignoreLink(aLinkElement[x]);
- } else {
- addBlockLink(aLinkElement[x], href.match(/id\=(\d+)/)[1], null, null, null);
- }
- }
- } else if(href !== null && href.indexOf('/report.application/?app_id=') != -1 && href.indexOf('http') != 0){
- addBlockLink(aLinkElement[x], href.match(/app_id\=(\d+)/)[1], null, null, null);
- // } else if(href !== null && href.indexOf('method=permissions.request') != -1 && href.indexOf('uiserver.php?app_id=') != -1){
- // addBlockLink(aLinkElement[x], href.match(/uiserver.php?app_id\=(\d+)/)[1], null, null, null);
- } else if(ajaxify !== null) {
- if(ajaxify.indexOf('/ajax/games/apprequest/apprequest.php?id=') != -1){
- addBlockLink(aLinkElement[x], ajaxify.match(/app_id\%5D\=(\d+)/)[1], 'span', 1, null);
- } else if(ajaxify.indexOf('/ajax/report.php?') != -1){
- addBlockLink(aLinkElement[x], ajaxify.match(/cid\=(\d+)/)[1], null, null, null);
- }
- } else {
- //Not an app link
- // if(aLinkElement[x].className.indexOf('layerCancel') != -1 && aLinkElement[x].parentNode.parentNode.previousSibling.previousSibling.innerHTML.indexOf('Block App') == 0){
- // unsafeWindow.console.log('found block app button: ' + aLinkElement[x].parentNode.parentNode.previousSibling.previousSibling.innerHTML + ' docurl=' + Document.URL);
- // addToggleNeverBlockButton(aLinkElement[x],0);
- // }
- }
- }
-
- }
- } catch(err) {
- if(err.lineNumber){
- unsafeWindow.console.log('fb_block err=' + err.message + ' at line ' + err.lineNumber);
- } else {
- unsafeWindow.console.log('fb_block err=' + err.message);
- }
- if(err.message == 'target.getElementsByTagName is not a function'){
- unsafeWindow.console.log('fb_block err detail=' + target);
- }
- }
- if(!event){
- if(runtimes < 15){
- runtimes++;
- if(runtimes == 15){
- window.addEventListener("DOMNodeInserted", checkDoc, false);
- runtimes = 30;
- }
- }
- window.setTimeout(checkDocT, 1000 * runtimes);
- }
- }
- //function addToggleNeverBlockButton(Element, app_id){
- //}
- function addBlockIfText(Element, app_id, placetag, tagcount,inside){
- if(Element.firstChild && Element.firstChild.tagName){
- if(Element.firstChild.tagName.toLowerCase().indexOf('img') == 0){
- return ignoreLink(Element);
- }
- }
- return addBlockLink(Element, app_id, placetag, tagcount,inside);
- }
- function addBlockLink(Element, app_id, placetag, tagcount,inside){
- var aElement=document.createElement('a');
- aElement.innerHTML = "Block";
- aElement.setAttribute('rel','dialog-post');
- aElement.setAttribute('style','display: inline;');
- aElement.setAttribute('ajaxify','/ajax/apps/block_app.php?app_id='+app_id+'&type_index=0&source=about&confirm_id=block_app_link');
- Element.setAttribute('hasblock','yes');
- Element.setAttribute('style','display: inline;');
- var placement = Element.nextSibling;
- var nodeins = Element.parentNode;
- if(placetag !== null){
- var elems = Element.getElementsByTagName(placetag);
- var len = elems.length;
- var tele = (tagcount !== null)?tagcount:0;
- if(tele < len){
- if(inside != null && inside == 1){
- nodeins = elems[tele];
- placement = elems[tele].lastChild.nextSibling;
- } else {
- nodeins = elems[tele].parentNode;
- placement = elems[tele].nextSibling;
- }
- }
- }
- nodeins.insertBefore(aElement,placement);
- var spanElement=document.createElement('span');
- spanElement.innerHTML = " \u00B7 ";
- nodeins.insertBefore(spanElement,aElement);
- }
- function ignoreLink(Element){
- Element.setAttribute('hasblock','yes');
- }
- checkDoc();