Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Gif Thread #6


quixef

Öne çıkan mesajlar

otomatik çeviren script var ondan. vpnsiz garipler de görebilsin diye ama imgurp patlamış herhalde. sabahtan beri yok bende.

@ad3m https://greasyfork.org/en/scripts/35130-imgur-mirror-modified

kageurufu'lu versiyona geçtim ben

Spoiler

// ==UserScript==
// @name         Imgur Mirror
// @version      7
// @description  Switches all imgur links to the mirror site http://kageurufu.net/imgur
// @author       Adrien Pyke Façaed by Ad3m
// @include      *://*/*
// @exclude      *://imgur.com/*
// @exclude      *://*.imgur.com/*
// @grant        none
// ==/UserScript==
/**
* @param sel - the selector you want to wait for
* @param action - the callback that will be executed when element/s matching the given selector are found, it is passed the array of found elements
* @param stopLooking - if true the function will stop looking for more elements after the first match
*/
function waitForElems(sel, action, stopLooking) {
  var tick;
  var id = 'fke' + Math.floor(Math.random() * 12345);
  var type = window.MutationObserver ? 'M' : 'S';
  var lastMutation = Date.now();
  var lastCall = Date.now();
  var queuedCall;
  function throttle(func) {
    var now = Date.now();
    clearTimeout(queuedCall);
    // less than 100ms since last mutation
    if(now - lastMutation < 100) {
      // 500ms or more since last query
      if(now - lastCall >= 500) {
        func();
      } else {
        queuedCall = setTimeout(func, 100);
      }
    } else {
      func();
    }
    lastMutation = now;
  }
  function findElem(sel) {
    lastCall = Date.now();
    var found = [].filter.call(document.querySelectorAll(sel), function(elem) {
      return elem.dataset[id] !== 'y';
    });
    if(found.length > 0) {
      if(stopLooking) {
        type === 'M' ? tick.disconnect() : clearInterval(tick);
      }
      found.forEach(function(elem) {
        elem.dataset[id] = 'y';
        action(elem);
      });
    }
  }
  if(type === 'M') {
    tick = new MutationObserver(throttle.bind(null, findElem.bind(null, sel)));
    tick.observe(document.body, { subtree: true, childList: true });
  } else {
    tick = setInterval(findElem.bind(null, sel), 300);
  }
  findElem(sel);
  return {
    type: type,
    stop: function() {
      if(type === 'M') {
        tick.disconnect();
      } else {
        clearInterval(tick);
      }
    }
  };
}
/**
* @param regex - should match the site you're waiting for
* @param action - the callback that will be executed when a matching url is visited
* @param stopLooking - if true the function will stop waiting for another url match after the first match
*/
function waitForUrl(regex, action, stopLooking) {
  function checkUrl(urlTest) {
    var url = window.location.href;
    if(url !== lastUrl && urlTest(url)) {
      if(stopLooking) {
        clearInterval(tick);
      }
      lastUrl = url;
      action();
    }
    lastUrl = url;
  }
  var urlTest = (typeof regex === 'function' ? regex : regex.test.bind(regex)),
      tick = setInterval(checkUrl.bind(null, urlTest), 300),
      lastUrl;
  checkUrl(urlTest);
  return tick;
}
//FIX LINK 
(function() {
    'use strict';
 
    var regex2 = /((https?:\/\/)?(?:i?m?\.)?imgur\.com\/(.*?(?:png|jpeg|jpg|gifv|gif|mp4)))|.*/ig;
 
    var getNewLink2 = function(imgurLink2, fixLink) {
      var urlz = imgurLink2.replace(regex2, '$1');
             return urlz;
    };
 
    waitForElems('img,a', function(node) {
        var isImg = node.nodeName === 'IMG';
        var prop = isImg ? 'src' : 'href';
        var newLink = getNewLink2(node[prop], isImg);
        if(newLink) {
            node[prop] = newLink;
            if (node.dataset.hrefUrl) {
                node.dataset.hrefUrl = newLink;
            }
            if (node.dataset.outboundUrl) {
                node.dataset.outboundUrl = newLink;
            }
        }
    });
})();
//FIX LINK
(function() {
    'use strict';
 
    var regex = /imgur\.com\/(?!a\/|gallery\/)(?:r\/[a-z0-9_]+\/)?([a-z0-9]+)(\.+[a-z0-9]+)?/i;
 
    var getNewLink = function(imgurLink, useGif) {
        var match = imgurLink.match(regex);
        if (match) {
            var file = match[1];
        if (match[2] == null) { 
            return 'http://kageurufu.net/imgur/?' + file + '.png';
        }
        if (match[2] == '.gif') { 
            return 'http://kageurufu.net/imgur/?' + file + '.gifv';
        }          
        else {
            return null;
      }
     }
    };
 
    waitForElems('img,a', function(node) {
        var isImg = node.nodeName === 'IMG';
        var prop = isImg ? 'src' : 'href';
        var newLink = getNewLink(node[prop], isImg);
        if(newLink) {
          if (prop == 'src') { newLink = newLink.replace(/\.(gifv)($|\?)/, '.gif'); }
          //console.log(newLink);
          //console.log(prop);
            node[prop] = newLink;
            if (node.dataset.hrefUrl) {
                node.dataset.hrefUrl = newLink;
            }
            if (node.dataset.outboundUrl) {
                node.dataset.outboundUrl = newLink;
            }
        }
    });
})();

changeLinks();
document.addEventListener('scroll', changeLinks);
document.addEventListener('click', changeLinks);
function changeLinks() {
    var list = document.querySelectorAll('[href*="imgur.com"]');
    for (var i = 0; i < list.length; i++) {
        var node = list.item(i);
        node.setAttribute('href', node.getAttribute('href')
            .replace('m.imgur.com/a/', 'kageurufu.net/imgur/?a/')
            .replace('imgur.com/a/', 'kageurufu.net/imgur/?a/')
            .replace('m.imgur.com/gallery/', 'kageurufu.net/imgur/?a/')
            .replace('imgur.com/gallery/', 'kageurufu.net/imgur/?a/')
            .replace('https://', 'http://'));
        node.setAttribute('href', node.getAttribute('href')
            .replace('i.imgur.com/', 'kageurufu.net/imgur/?')
            .replace('imgur.com/', 'kageurufu.net/imgur/?')
            .replace('https://', 'http://'));
    }
    list = document.querySelectorAll('[src*="imgur.com"]');
    for (i = 0; i < list.length; i++) {
        var node = list.item(i);
        node.setAttribute('src', node.getAttribute('src')
            .replace('imgur.com/a/', 'kageurufu.net/imgur/?a/')
            .replace('imgur.com/gallery/', 'kageurufu.net/imgur/?a/')
            .replace('https://', 'http://'));
        node.setAttribute('src', node.getAttribute('src')
            .replace('i.imgur.com/', 'kageurufu.net/imgur/?')
            .replace('imgur.com/', 'kageurufu.net/imgur/?')
            .replace('https://', 'http://'));
    }
}
(function () {
  'use strict';
  if (window.location.host == "www.reddit.com") {
  function cl(ac) {
    var a = ac.querySelectorAll('a[data-href-url]');
    var ct_out = 0, ct_aff = 0, ct = 0, ct_in;
    for (var i = 0; i < a.length; i++) {
      /*
      // This is reddit's function to determine the url, which is stored in `o`.
      // It then hooks window unload to call sendBeacon with the url in `o` or
      // modifies the href attribute (if sendBeacon is disabled in config or unsupported by the browser).
      function o(e) {
       var t = $(e),
        r = Date.now(),
        o;
       return t.attr('data-inbound-url')
         ? o = t.attr('data-inbound-url')
         : !n && t.attr('data-outbound-expiration') > r && (o = t.attr('data-outbound-url')),
         o && (i ? s = o : e.href = o),
       !0
      }
      */

      // Some minimal counting so we can tell things are working
      if (a.getAttribute('data-inbound-url')) {
        ct_in++;
      }
      if (a.getAttribute('data-affiliate-url')) {
        ct_aff++;
      }
      if (a.getAttribute('data-outbound-url') || a.getAttribute('data-outbound-expiration')) {
        ct_out++;
      }

      // Goals:
      //  - make sure `o` stays undefined.
      //  - avoid ever getting this function called
      // Removing all the relevent attributes gets us both of those

      // Unclear what the purpose of these is, but they are being used to
      // re-write urls (and trigger entry to the fn above), so remove.
      a.removeAttribute('data-inbound-url');

      // Doesn't appear that reddit is injecting these affiliate links
      // anymore, but no reason to remove this
      a.removeAttribute('data-affiliate-url');

      // We don't actually need to remove this, but it does short circuit
      // the condition quicker & cleans up the html, so do it.
      a.removeAttribute('data-outbound-expiration');
      a.removeAttribute('data-outbound-url');

      ct++;
    }

    console.log('>>>');
    console.log('Outbound redirects removed: ' + ct_out);
    console.log('Inbound redirects removed: ' + ct_out);
    console.log('Affiliate redirects removed: ' + ct_aff);
    console.log('Total redirects removed: ' + ct);
    console.log('<<<');
  }

  var tbls = document.querySelector('#siteTable');
  var obs = new MutationObserver(function (r, self) {
    for (var i = 0; i < r.length; i++) {
      var ad = r.addedNodes;
      for (var j = 0; j < ad.length; j++) {
        var n = ad[j];
        cl(n);
      }
    }
  });
  obs.observe(tbls, {
    childList: true
  });

  // TODO: consider patching out window.navigator.sendBeacon (which reddit only uses for this link tracking)
  // TODO: consider blocking the recent_srs cookie used for tracking
  cl(document);
  }
}) ();

 

Xenus tarafından düzenlendi
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...