No Embed Youtube

replace embed iframe, object with anchor link.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name No Embed Youtube
// @version 3.0.0
// @description replace embed iframe, object with anchor link.
// @homepageURL https://github.com/eight04/no-embed-youtube
// @supportURL https://github.com/eight04/no-embed-youtube/issues
// @license MIT
// @author eight04 <[email protected]>
// @namespace eight04.blogspot.com
// @include http*
// @exclude http://www.youtube.com/*
// @exclude https://www.youtube.com/*
// @exclude https://vimeo.com/*
// @run-at document-start
// @grant none
// ==/UserScript==

"use strict";

var xpath = `(
	//iframe[
		contains(@src, 'youtube.com/embed/') or
		contains(@src, 'youtube.com/v/') or
		contains(@src, 'youtube-nocookie.com/embed/') or
		contains(@src, 'youtube-nocookie.com/v/') or
		contains(@data-src, 'youtube.com/embed/') or
		contains(@src, 'vimeo.com/video')
	] |
	//object[./param[contains(@value, 'youtube.com/v/')]] |
	//embed[
		contains(@src, 'youtube.com/v/') and
		not(ancestor::object)
	]
)[not(ancestor::*[@id='YTLT-player'])]`;

const patterns = [
	{
    test: /youtube(-nocookie)?\.com\/(embed|v)\/(.+?)(\?|&|$)/,
    repl: match => `https://www.youtube.com/watch?v=${match[3]}`
  },
  {
    test: /vimeo\.com\/video\/(\d+)/,
    repl: match => `https://vimeo.com/${match[1]}`
  }
];

var unEmbed = function(node){

	var result = document.evaluate(
		xpath, node, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

	var element = null;
	var i = 0, j;

	while ((element = result.snapshotItem(i++))) {

		// iframe or embed
		var url = element.src || element.dataset.src;

		// object
		if(!url){
			for(j = 0; j < element.childNodes.length; j++){
				var pa = element.childNodes[j];
				if(pa.nodeName == "PARAM" && pa.getAttribute("name") == "movie"){
					url = pa.getAttribute("value");
					break;
				}
			}
		}

		if(!url){
			continue;
		}

    for (const pattern of patterns) {
      const match = url.match(pattern.test);
      if (!match) continue;
      const newUrl = pattern.repl(match);
      var a = document.createElement("a");
      a.textContent = newUrl;
      a.href = newUrl;
      a.target = "_blank";
      a.className = "unembed";
      element.parentNode.replaceChild(a, element);
      break;
    }
	}
};

new MutationObserver(function(){
	if (document.body) {
		unEmbed(document.body);
	}
}).observe(document, {
	childList: true,
	subtree: true
});