Advertisement
Guest User

embed

a guest
Apr 3rd, 2020
393
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var embed = {};
  2.  
  3. embed.init = function() {
  4.  
  5.   var messageElements = document.getElementsByClassName("divMessage");
  6.  
  7.   for (var i = 0; i < messageElements.length; ++i) {
  8.     var linkElements = messageElements[i].getElementsByTagName("a");
  9.  
  10.     for (var j = 0; j < linkElements.length; ++j)
  11.       embed.processLinkForEmbed(linkElements[j]);
  12.   }
  13.  
  14. };
  15.  
  16. embed.processLinkForEmbed = function(linkElement) {
  17.  
  18.   var url = linkElement.href;
  19.   var domain = embed.getDomain(url);
  20.  
  21.   if (!domain) {
  22.     return;
  23.   }
  24.  
  25.   var domainSrcFunction = embed.domainFunctionMap[domain];
  26.  
  27.   if (!domainSrcFunction) {
  28.     return;
  29.  
  30.   }
  31.  
  32.   var embedSrc = domainSrcFunction(url);
  33.  
  34.   if (!embedSrc) {
  35.     return;
  36.   }
  37.  
  38.   linkElement.parentNode.insertBefore(embed.buildEmbed(650, 350, embedSrc),
  39.       linkElement.nextSibling);
  40.  
  41. };
  42.  
  43. embed.buildEmbed = function(width, height, src) {
  44.  
  45.   var html = '<iframe';
  46.   html += ' width="' + width + '"';
  47.   html += ' height="' + height + '"';
  48.   html += ' src="' + src + '"';
  49.   html += ' frameborder="0"';
  50.   html += ' allowfullscreen';
  51.   html += '></iframe>';
  52.  
  53.   var wrapperElement = document.createElement('div');
  54.   wrapperElement.style.display = 'inline';
  55.  
  56.   var divElement = document.createElement('div');
  57.   divElement.innerHTML = html;
  58.   divElement.style.display = 'block';
  59.  
  60.   var buttonElement = document.createElement('span');
  61.   buttonElement.innerHTML = '[Remove]';
  62.   buttonElement.className = 'embedButton glowOnHover';
  63.  
  64.   buttonElement.onclick = function() {
  65.     if (divElement.style.display === 'none') {
  66.       divElement.style.display = 'block';
  67.       divElement.innerHTML = html;
  68.       buttonElement.innerHTML = '[Remove]';
  69.     }
  70.  
  71.     else {
  72.       divElement.style.display = 'none';
  73.       divElement.innerHTML = null;
  74.       buttonElement.innerHTML = '[Embed]';
  75.     }
  76.   };
  77.  
  78.   // note: append order
  79.   wrapperElement.appendChild(buttonElement);
  80.   wrapperElement.appendChild(divElement);
  81.  
  82.   return wrapperElement;
  83.  
  84. };
  85.  
  86. // substrings to the first occurrence of an input string if present
  87. embed.getUntil = function(string, input) {
  88.  
  89.   var inputIndex = string.indexOf(input);
  90.  
  91.   return inputIndex !== -1 ? string.substring(0, inputIndex) : string;
  92.  
  93. };
  94.  
  95. embed.getDomain = function(url) {
  96.   return url.match(/\b(?!www.)\b([a-z0-9]+\.)*[a-z0-9]+\.[a-z]+/i)[0];
  97. };
  98.  
  99. embed.getSrcYouTubeCommon = function(url, secure, domain) {
  100.  
  101.   var videoId = url.split('v=')[1];
  102.  
  103.   if (!videoId) {
  104.     return;
  105.   }
  106.  
  107.   videoId = embed.getUntil(videoId, '&');
  108.  
  109.   var embedSrc = secure ? 'https' : 'http';
  110.   embedSrc += '://' + domain + '/embed/' + videoId;
  111.  
  112.   var startTime = embed.getYouTubeStartTime(url);
  113.  
  114.   if (startTime) {
  115.     embedSrc += '?start=' + startTime;
  116.   }
  117.  
  118.   return embedSrc;
  119.  
  120. };
  121.  
  122. embed.getSrcYouTube = function(url) {
  123.   return embed.getSrcYouTubeCommon(url, true, 'www.youtube.com');
  124. };
  125.  
  126. embed.getSrcInvidious = function(url) {
  127.   return embed.getSrcYouTubeCommon(url, true, 'www.invidio.us');
  128. };
  129.  
  130. embed.getSrcYouTubeShortened = function(url) {
  131.  
  132.   var videoId = url.split('/')[3];
  133.  
  134.   if (!videoId) {
  135.     return;
  136.   }
  137.  
  138.   // trim any params in the url
  139.   videoId = embed.getUntil(videoId, '?');
  140.  
  141.   var embedSrc = 'https://www.youtube.com/embed/' + videoId;
  142.  
  143.   var startTime = embed.getYouTubeStartTime(url);
  144.  
  145.   if (startTime) {
  146.     embedSrc += '?start=' + startTime;
  147.   }
  148.  
  149.   return embedSrc;
  150.  
  151. };
  152.  
  153. embed.getSrcBitChute = function(url) {
  154.  
  155.   if (!url.includes('/video/')) {
  156.     return;
  157.   }
  158.  
  159.   var videoId = url.split('/')[4];
  160.  
  161.   if (!videoId) {
  162.     return;
  163.   }
  164.  
  165.   return 'https://www.bitchute.com/embed/' + videoId;
  166.  
  167. };
  168.  
  169. embed.getSrcLiveLeak = function(url) {
  170.  
  171.   var videoId = url.split('t=')[1];
  172.  
  173.   if (!videoId) {
  174.     return;
  175.   }
  176.  
  177.   return 'https://www.liveleak.com/e/' + embed.getUntil(videoId, '&');
  178.  
  179. };
  180.  
  181. // translate ?t=XhXmXs to raw seconds (the only input supported by youtube's
  182. // embed start time)
  183. // todo: recode with loop
  184. embed.getYouTubeStartTime = function(url) {
  185.  
  186.   var startTime = url.split('t=')[1];
  187.  
  188.   if (!startTime) {
  189.     return;
  190.   }
  191.  
  192.   startTime = embed.getUntil(startTime, '&');
  193.  
  194.   var totalSeconds = 0;
  195.  
  196.   var hours = startTime.match(/(\d+)(?:h)/);
  197.  
  198.   if (hours) {
  199.     totalSeconds += parseInt(hours[1]) * 3600;
  200.   }
  201.  
  202.   var minutes = startTime.match(/(\d+)(?:m)/);
  203.  
  204.   if (minutes) {
  205.     totalSeconds += parseInt(minutes[1]) * 60;
  206.   }
  207.  
  208.   var seconds = startTime.match(/(\d+)(?:s)/);
  209.  
  210.   if (seconds) {
  211.     totalSeconds += parseInt(seconds[1]);
  212.   }
  213.  
  214.   return totalSeconds;
  215.  
  216. };
  217.  
  218. embed.domainFunctionMap = {};
  219.  
  220. embed.domainFunctionMap['youtube.com'] = embed.getSrcYouTube;
  221. embed.domainFunctionMap['youtu.be'] = embed.getSrcYouTubeShortened;
  222. embed.domainFunctionMap['invidio.us'] = embed.getSrcInvidious;
  223. embed.domainFunctionMap['bitchute.com'] = embed.getSrcBitChute;
  224. embed.domainFunctionMap['liveleak.com'] = embed.getSrcLiveLeak;
  225.  
  226. embed.init();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement