Greasy Fork is available in English.

Twitter

If you hate Twitter t.co URL shortener and would like to see the full links in your timeline, this is the script for you.

// ==UserScript==
// @name           Twitter
// @namespace      http://fcmartins.net
// @include        http://twitter.com/*
// @include        https://twitter.com/*
// @version 0.0.1.20180906145405
// @description If you hate Twitter t.co URL shortener and would like to see the full links in your timeline, this is the script for you.
// ==/UserScript==

function httpExpandURI(element) {
  GM_xmlhttpRequest({
    url: element.getAttribute("data-expanded-url"),
    method: "HEAD",
    onload: function(response) {
      modify(element, response.finalUrl);
    }
  });
}

function modify(element, url) {
  element.setAttribute("href", url);
  element.textContent = url;
  
  element.removeAttribute("data-ultimate-url");
  element.removeAttribute("title");
  element.removeAttribute("data-expanded-url");
  docHeight = document.getElementById("stream-items-id").scrollHeight;
}

function expandURL() {
  Array.forEach(document.getElementsByTagName("a"), function(element, index, array) {
    if(element.className.indexOf("twitter-timeline-link") != -1 && element.getAttribute("data-expanded-url")) {
      if(element.getAttribute("data-ultimate-url")) {
        modify(element, element.getAttribute("data-ultimate-url"));        
      }
      else {
        httpExpandURI(element);
      }      
    }
  });    
}

function divClick() {
  window.setTimeout(expandURL, 1000);
}

function newTweetsBar() {
  var div = document.getElementsByClassName("new-tweets-bar")[0];
  if(typeof div !== "undefined") {
    div.addEventListener("click", divClick, false);
  }
}

function onScroll(e) {
  if(scrollId) {
    window.clearTimeout(scrollId);
  }
  scrollId = window.setTimeout(function() {
    if(docHeight < document.getElementById("stream-items-id").scrollHeight) {
      expandURL();      
    }
  }, 2000);
}

function start() {
  if(document.getElementById("stream-items-id")) {
    window.clearTimeout(startId);
    docHeight = document.getElementById("stream-items-id").scrollHeight;
    expandURL();
  }
}

var scrollId;
var docHeight;
var startId;

window.addEventListener("load", function(e) {
  startId = window.setInterval(start, 1000);
}, false);
window.setInterval(newTweetsBar, 1000);
window.addEventListener("scroll", onScroll, false);