RES twitter expandos

Formats embedded tweets. RES cannot do this for technical and security reasons.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name        RES twitter expandos
// @namespace   com.example
// @description Formats embedded tweets. RES cannot do this for technical and security reasons.
// @match       https://*.reddit.com/*
// @version     1
// @grant       none
// ==/UserScript==

"use strict";

/**
 * loadTwitterScript(): void
 * Adds the twitter script that was stripped by RES to the given node.
 */
function loadTwitterScript(node) {
  node.style.display = 'none';
  let script = document.createElement('script');
  script.src = 'https://platform.twitter.com/widgets.js';
  node.appendChild(script);
}

/**
 * observeForTwits(target: HTMLElement): void
 * Attaches a MutationObserver to target and loads twitter's js whenever it finds a tweet.
 */
function observeForTwits(target) {
  let observer = new MutationObserver(function(mutations) {
    for (let mutation of mutations) {
      for (let node of mutation.addedNodes) {
        if (node.className == 'twitter-tweet') {
          loadTwitterScript(node);
        }
      }
    }
  });

  // configuration of the observer:
  let config = { childList: true, subtree: true };

  // pass in the target node, as well as the observer options
  observer.observe(target, config);
}

observeForTwits(document.body);