someone_

gpu.user.js

Dec 3rd, 2012
115
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name           4chan Linkify
  3. // @namespace      csimi
  4. // @author         csimi
  5. // @description    Linkification of text links.
  6. // @homepage       http://userscripts.org/users/156405/scripts
  7. // @version        1.4.6
  8. // @updateURL      http://userscripts.org/scripts/source/87750.meta.js
  9. // @icon           http://i.imgur.com/JHVzK.png
  10. // @include        http://boards.4chan.org/*
  11. // @include        https://boards.4chan.org/*
  12. // ==/UserScript==
  13.  
  14. (function () {
  15.  
  16. ///////////////////////////////////
  17.  
  18. var config = {
  19.     'multiLineLinks': true,
  20.     'targetBlank': false
  21. }
  22.  
  23. ///////////////////////////////////
  24.  
  25. function $ (a, b) { if (a && document.querySelector) return (b || document).querySelector(a); }
  26. function $$ (a, b) { if (a && document.querySelectorAll) return (b || document).querySelectorAll(a); }
  27. function foreach (a, f) { if (typeof(a) == 'object' && a.length && typeof(f) == 'function') { for (var i = 0; i < a.length; i++) { a[i] = f(a[i], i) || a[i]; } } }
  28. function ce (a, b) { if (typeof(a) != 'string') return; var c = document.createElement(a); foreach(b, function (d) { if (d.nodeType == 1) { c.appendChild(d); } else if (typeof(d) == 'object' && !d.length) { for (var k in d) { c.setAttribute(k, d[k]); } } else if (typeof(d) == 'string') { c.appendChild(document.createTextNode(d)); } }); return c; }
  29.  
  30. function checkLinks (a) {
  31.     if (!a) return;
  32.     if (a.nodeType == 3) {
  33.         var b = a.nodeValue.match(/[a-zA-Z][a-zA-Z0-9+-.]+:\/\/[^\s]+/);
  34.         if (!b) b = a.nodeValue.match(/mailto:[^\s]+/);
  35.         if (!b) b = a.nodeValue.match(/magnet:[^\s]+/);
  36.         if (!b) b = a.nodeValue.match(/news:[^\s]+/);
  37.         if (b && (a.parentNode.nodeName.toLowerCase() != 'a')) {
  38.             var m = b[0];
  39.             if (a.nodeValue.length == m.length) {
  40.                 var el = ce('a', [
  41.                     {'href': a.nodeValue,
  42.                     'class': 'chanlinkify'},
  43.                     a.nodeValue
  44.                 ]);
  45.                 if (a.nextSibling && (((a.nextSibling.className && a.nextSibling.className === 'spoiler') || a.nextSibling.tagName && (a.nextSibling.tagName.toLowerCase() === "s" || a.nextSibling.tagName.toLowerCase() === "wbr") ) || a.nextSibling.nodeType === 3)) {
  46.                     a.nodeValue = a.nodeValue+((a.nextSibling.nodeType === 3)? a.nextSibling.nodeValue : ((a.nextSibling.childNodes.length)? a.nextSibling.childNodes[0].nodeValue : ''));
  47.                     a.parentNode.removeChild(a.nextSibling);
  48.                     return checkLinks(a);
  49.                 }
  50.                 if (config.targetBlank) el.setAttribute('target', 'blank');
  51.                 a.parentNode.replaceChild(el, a);
  52.             }
  53.             else {
  54.                 var c = a.nodeValue.indexOf(m);
  55.                 if (a.nodeValue.substring(c-1, c) == '(') {
  56.                     if (/(.*)\x29$/.test(m)) {
  57.                         m = m.match(/(.*)\x29$/)[1];
  58.                         c = a.nodeValue.indexOf(m);
  59.                     }
  60.                 }
  61.                 if (a.nodeValue.substring(c-2, c) == '("') {
  62.                     if (/(.*)\x22\x29$/.test(m)) {
  63.                         m = m.match(/(.*)\x22\x29$/)[1];
  64.                         c = a.nodeValue.indexOf(m);
  65.                     }
  66.                 }
  67.                 if (a.nodeValue.substring(c-2, c) == '(\'') {
  68.                     if (/(.*)\x27\x29$/.test(m)) {
  69.                         m = m.match(/(.*)\x27\x29$/)[1];
  70.                         c = a.nodeValue.indexOf(m);
  71.                     }
  72.                 }
  73.                 var d = c+m.length;
  74.                 if (c != 0) a.parentNode.insertBefore(document.createTextNode(a.nodeValue.substring(0, c)), a);
  75.                 var el = ce('a', [
  76.                     {'href': m,
  77.                     'class': 'chanlinkify'},
  78.                     m
  79.                 ]);
  80.                 if (config.targetBlank) el.setAttribute('target', 'blank');
  81.                 a.parentNode.insertBefore(el, a);
  82.                 if (d == a.nodeValue.length) a.parentNode.removeChild(a);
  83.                 else {
  84.                     a.nodeValue = a.nodeValue.substring(d);
  85.                     checkLinks(a);
  86.                 }
  87.             }
  88.         }
  89.     }
  90.     else if (a.className == 'quote' || 'spoiler') checkLinks(a.childNodes[0]);
  91. }
  92.  
  93. foreach($$('blockquote'), function (a) {
  94.     foreach(a.childNodes, function (b) {
  95.         checkLinks(b);
  96.     });
  97. });
  98.  
  99. foreach($$('span.subject'), function (b) {
  100.     checkLinks(b.childNodes[0]);
  101. });
  102.  
  103. function handler(e) {
  104.     var t = e && e.target || e;
  105.     if (t.nodeType === 1 && t.nodeName.toLowerCase() === 'div') {
  106.         if (t.className.split(' ').filter(function (cls) { return cls === 'postContainer'; }).length) {
  107.             foreach($('blockquote', t).childNodes, function (a) {
  108.                 checkLinks(a);
  109.             });
  110.         }
  111.     }
  112.     if (t.nodeType === 3 && t.parentNode.nodeName.toLowerCase() === 'blockquote') {
  113.         checkLinks(t);
  114.     }
  115.     if (t.nodeName.toLowerCase() == 'blockquote') {
  116.         foreach(t.childNodes, function (a) {
  117.             checkLinks(a);
  118.         });
  119.     }
  120. }
  121.  
  122. if (MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.OMutationObserver) {
  123.     observer = new MutationObserver(function(a) {
  124.         for (var i = 0; a[i]; i++) {
  125.             foreach(a[i].addedNodes, handler);
  126.         }
  127.     });
  128.     observer.observe($('.board'), {
  129.         childList: true,
  130.         subtree: true
  131.     })
  132. } else {
  133.     document.addEventListener('DOMNodeInserted', handler, false);
  134. }
  135.  
  136. function appendNextTextNode (a, b) {
  137.     var r = (a.parentNode.className == 'quote') ? a.parentNode : a;
  138.     if (r.nextSibling && (r.nextSibling.nodeName.toLowerCase() == 'br')) {
  139.         if (r.nextSibling.nextSibling && (r.nextSibling.nextSibling.nodeType == 3)) {
  140.             var b = r.nextSibling.nextSibling;
  141.             var c = b.nodeValue.match(/^[^\s]+/);
  142.             if (!c) return;
  143.             a.href += c[0];
  144.             a.childNodes[0].nodeValue += c[0];
  145.             if (b.nodeValue.length == c[0].length) {
  146.                 r.parentNode.removeChild(r.nextSibling);
  147.                 r.parentNode.removeChild(b);
  148.             }
  149.             else {
  150.                 r.parentNode.removeChild(r.nextSibling);
  151.                 b.nodeValue = b.nodeValue.substring(c[0].length);
  152.             }
  153.         }
  154.     }
  155.     else if (b === true && r.nextSibling && (r.nextSibling.nodeType == 3)) {
  156.         var b = r.nextSibling;
  157.         var c = b.nodeValue.match(/^[^\s]+/);
  158.         if (!c) return;
  159.         a.href += c[0];
  160.         a.childNodes[0].nodeValue += c[0];
  161.         if (b.nodeValue.length == c[0].length) {
  162.             r.parentNode.removeChild(b);
  163.         }
  164.         else {
  165.             b.nodeValue = b.nodeValue.substring(c[0].length);
  166.         }
  167.     }
  168. }
  169.  
  170. if (config.multiLineLinks) document.addEventListener('click', function (e) {
  171.     var t = e.target;
  172.     if ((t.className == 'chanlinkify') && e.shiftKey && e.ctrlKey) {
  173.         e.preventDefault();
  174.         e.stopPropagation();
  175.         appendNextTextNode(t);
  176.     }
  177. }, false);
  178.  
  179. })();
  180.  
  181. // ==UserScript==
  182. // @id             GPU embeds
  183. // @name           gpu
  184. // @version        1.0
  185. // @namespace      
  186. // @author        
  187. // @description    
  188. // @include        http*
  189. // @run-at         document-start
  190. // ==/UserScript==
  191.  
  192. var d = document, s = function(a,b,c) { a.setAttribute(b,c); }, rm = function(a){ a.parentNode.removeChild(a); }, event = function(e) {
  193.  if (e.animationName == 'nodeInserted') {
  194.   if (e.target.tagName.match(/embed|object/i)) {
  195.   try {
  196.    var a1, a2, a3;
  197.    for (var i=0,x=e.target.getElementsByTagName('param');i<x.length;i++) {
  198.     if (x[i].name.match(/wmode/i)) {
  199.      x[i].value = "direct";
  200.      a1 = 1;
  201.     } else
  202.     if (x[i].name.match(/allowfullscreen/i)) {
  203.      x[i].value = "true";
  204.      a2 = 1;
  205.     } else
  206.     if (x[i].name.match(/allowscriptaccess/i)) {
  207.      x[i].value = "always";
  208.      a3 = 1;
  209.     }
  210.    }
  211.    if (e.target.tagName.match(/object/i)) {
  212.     var tmp = d.createElement('param');
  213.     a1 || ((tmp.value='direct'),(tmp.name='wmode'),e.target.appendChild(tmp),(tmp=d.createElement('param')));
  214.     a2 || ((tmp.value='true'),(tmp.name='allowFullScreen'),e.target.appendChild(tmp),(tmp=d.createElement('param')));
  215.     a3 || ((tmp.value='always'),(tmp.name='allowScriptAccess'),e.target.appendChild(tmp));
  216.    } else
  217.    {
  218.     (s(e.target, "allowfullscreen", "true"),s(e.target, "wmode", "direct"),s(e.target, "allowscriptaccess", "always"));
  219.    }
  220.    } catch(err) {
  221.     console.log(err);
  222.    }
  223.   } else
  224.   {
  225.    rm(e.target);
  226.   }
  227.  }
  228. }, css = "@keyframes, nodeInserted { from { clip: rect(1px, auto, auto, auto); } to { clip: rect(0px, auto, auto, auto); } }\n\
  229. @-moz-keyframes nodeInserted { from { clip: rect(1px, auto, auto, auto); } to { clip: rect(0px, auto, auto, auto); } }\n\
  230. embed, object, script[id='bug.surrogate'], #ghostery-purple-bubble, div[id^=cometchat], script[src*=cometchat], link[href*=cometchat]/*, form#delform>div[style='float: right;']*/, body > script + center#topper + hr + center, body > script + center#topper + hr + center + hr + center#aaaa, body > div#thefuncapsule > table#yard, script[src='/js/advertisement.js'], div[id$='AdBar'], ul#WikiaNotifications, div[style='margin:3px auto; text-align:center'], br + div.adb, #WikiaRail > *:not(#WikiaSearch), #WikiaBarWrapper, div[id^=pim].postInfoM, div#overhead-you-know-what, td#sidebar-you-know-what, div.f.gruze-sidebar.left-sidebar.module-min.module-blocks.match-body-height, #fake-col-left, div.skiptranslate, div#rightCol[aria-label][role=complementary], a[target='_newtab'][href*='cect-shop.com'], body > div > script[type='text/javascript'] + div.body-navbar, div#pAdvertContainer + div#pContainer + div#toolbarContainer, div.WikiaBarCollapseWrapper, section#ExitstitialInfobox[class], script[src*=wikia], div#rightCol[role=complementary], ul.ShareRail, div.WikiaWideTablesWrapper > canvas[width] + img.popout, div.WikiaWideTablesWrapper > canvas[width], div.comment-ad, div.sleekadbubble, div.partial-ad, div#ad_footer_s, div#adv_overlay, div.ll + div.rr > div[style='margin-top:10px;'], div.ad-blocking-makes-fella-confused, div[gmi-name='ad_zone'], div.banner_728 { animation: nodeInserted .001s; -moz-animation: nodeInserted .001s; }";
  231.  
  232. d.addEventListener('animationstart', event, false);
  233.  
  234. function addStyle(a,b) {
  235.  var newstyle = d.createElement("style");
  236.  newstyle.setAttribute("type", "text/css");
  237.  newstyle.appendChild(document.createTextNode(a));
  238.  b.appendChild(newstyle);
  239. }
  240.  
  241. (function applyCSS(){var h=d.getElementsByTagName("head");h&&h[0]?addStyle(css,h[0]):setTimeout(applyCSS,10)})();
RAW Paste Data