Greasy Fork

来自缓存

Greasy Fork is available in English.

YouTube Lite (更好的体验)

使YouTube界面更加动态,隐藏包含关键词的视频,添加下载按钮并在无广告页面(嵌入youtube-nocookie)中打开视频。

当前为 2023-12-09 提交的版本,查看 最新版本

// ==UserScript==
// @name       YouTube Lite (melhor experiência)
// @name:pt       YouTube Lite (melhor experiência)
// @name:pt-PT       YouTube Lite (melhor experiência)
// @name:pt-BR       YouTube Lite (melhor experiência)
// @name:es       YouTube Lite (la mejor experiencia)
// @name:en       YouTube Lite (best experience)
// @name:fr       YouTube Lite (meilleure expérience)
// @name:ru       YouTube Lite (лучший опыт)
// @name:ja       YouTube Lite (最高のエクスペリエンス)
// @name:ko       YouTube Lite (최고의 경험)
// @name:zh-TW       YouTube Lite (更佳體驗)
// @name:zh-CN       YouTube Lite (更好的体验)
// @name:id       YouTube Lite (pengalaman terbaik)
// @name:ug       YouTube Lite (ئەڭ ياخشى تەجرىبە)
// @name:ar       YouTube Lite (أفضل تجربة)
// @name:he       YouTube Lite (חוויית השימוש הטובה ביותר)
// @name:hi       YouTube Lite (सर्वश्रेष्ठ अनुभव)
// @name:th       YouTube Lite (ประสบการณ์ที่ดีที่สุด)
// @name:bg       YouTube Lite (най-добър опит)
// @name:ro       YouTube Lite (cea mai bună experiență)
// @name:fi       YouTube Lite (paras kokemus)
// @name:it       YouTube Lite (migliore esperienza)
// @name:el       YouTube Lite (καλύτερη εμπειρία)
// @name:eo       YouTube Lite (plej bona sperto)
// @name:hu       YouTube Lite (legjobb élmény)
// @name:nb       YouTube Lite (beste opplevelse)
// @name:sk       YouTube Lite (najlepšia skúsenosť)
// @name:sv       YouTube Lite (bästa upplevelsen)
// @name:sr       YouTube Lite (најбоље искуство)
// @name:pl       YouTube Lite (najlepsze doświadczenie)
// @name:nl       YouTube Lite (beste ervaring)
// @name:de       YouTube Lite (beste Erfahrung)
// @name:da       YouTube Lite (bedste oplevelse)
// @name:cs       YouTube Lite (nejlepší zkušenost)
// @name:uk       YouTube Lite (найкращий досвід)
// @name:tr       YouTube Lite (en iyi deneyim)
// @name:vi       YouTube Lite (trải nghiệm tốt nhất)
// @name:fr-CA       YouTube Lite (meilleure expérience au Canada)

// @namespace    http://linkme.bio/jhonpergon/?userscript=youtube_lite
// @version      2.7
// @author       Jhon Pérgon
// @license      MIT

// @description       Deixa a interface do YouTube mais leve, oculta vídeos com palavras-chaves, adiciona botão de download e abre o vídeo em uma página livre de anúncios (embed youtube-nocookie).
// @description:pt       Deixa a interface do YouTube mais leve, oculta vídeos com palavras-chaves, adiciona botão de download e abre o vídeo em uma página livre de anúncios (embed youtube-nocookie).
// @description:pt-PT       Deixa a interface do YouTube mais leve, oculta vídeos com palavras-chaves, adiciona botão de download e abre o vídeo em uma página livre de anúncios (embed youtube-nocookie).
// @description:pt-BR       Deixa a interface do YouTube mais leve, oculta vídeos com palavras-chaves, adiciona botão de download e abre o vídeo em uma página livre de anúncios (embed youtube-nocookie).
// @description:es      Hace que la interfaz de YouTube sea más dinámica, oculta videos con palabras clave, agrega un botón de descarga y abre el video en una página sin publicidad (embed youtube-nocookie).
// @description:en      Makes the YouTube interface lighter, hides videos with keywords, adds a download button and opens the video on an ad-free page (embed youtube-nocookie).
// @description:fr      Il rend l'interface YouTube plus dynamique, masque les vidéos avec des mots-clés, ajoute un bouton de téléchargement et ouvre la vidéo sur une page sans publicité (embed youtube-nocookie).
// @description:ru      Он делает интерфейс YouTube более динамичным, скрывает видео с ключевыми словами, добавляет кнопку загрузки и открывает видео на странице без рекламы (встроить youtube-nocookie).
// @description:ja      YouTube インターフェースをより動的にし、キーワードを含むビデオを非表示にし、ダウンロード ボタンを追加して、広告なしのページ (youtube-nocookie embed) でビデオを開きます。
// @description:ko      YouTube 인터페이스를 더욱 동적으로 만들고, 키워드로 동영상을 숨기고, 다운로드 버튼을 추가하고, 광고 없는 페이지에서 동영상을 엽니다(youtube-nocookie embed).
// @description:zh-TW      使YouTube介面更加動態,隱藏包含關鍵字的影片,新增下載按鈕,並在無廣告頁面(嵌入youtube-nocookie)中開啟影片。
// @description:zh-CN      使YouTube界面更加动态,隐藏包含关键词的视频,添加下载按钮并在无广告页面(嵌入youtube-nocookie)中打开视频。
// @description:id      Membuat antarmuka YouTube lebih ringan, menyembunyikan video dengan kata kunci, menambahkan tombol unduh, dan membuka video di halaman tanpa iklan (sematkan youtube-nocookie).
// @description:ug      يوتۇب يېڭىلاندۇرغۇچى كىرىشتىمىنى ياقسى قىلىدۇ، ئاڭلىق سۆزلىك ۋىدېئولارنى يوپۇش قىلىدۇ، چۈشۈرمە تومبۇلى قوشىدۇ ۋە چىراق ئېكراندا (youtube-nocookie sematka qilish) ۋىدېئونى ئېچىدۇ.
// @description:ar      يجعل واجهة يوتيوب أخف وزنًا، يخفي مقاطع الفيديو بكلمات مفتاحية، يضيف زر تنزيل ويفتح الفيديو على صفحة خالية من الإعلانات (تضمين youtube-nocookie).
// @description:he      הופך את ממשק YouTube לקל יותר, מסתיר סרטונים עם מילות מפתח, מוסיף לחצן הורדה ופותח את הסרטון על דף נטול פרסומות (הטמעת youtube-nocookie).
// @description:hi      यूट्यूब इंटरफ़ेस को हल्का बनाता है, कीवर्ड के साथ वीडियो को छुपाता है, डाउनलोड बटन जोड़ता है और एड-मुक्त पृष्ठ पर वीडियो खोलता है (youtube-nocookie embed)।
// @description:th      ทำให้อินเตอร์เฟซ YouTube เบาขึ้น, ซ่อนวิดีโอด้วยคำสำคัญ, เพิ่มปุ่มดาวน์โหลด และเปิดวิดีโอบนหน้าไม่มีโฆษณา (ฝัง youtube-nocookie) ให้ดู
// @description:bg      Прави интерфейса на YouTube по-лек, скрива видеоклипове с ключови думи, добавя бутон за изтегляне и отваря видеоклипа на страница без реклами (вграждане на youtube-nocookie).
// @description:ro      Face interfața YouTube mai ușoară, ascunde videoclipurile cu cuvinte cheie, adaugă un buton de descărcare și deschide videoclipul pe o pagină fără reclame (încorporare youtube-nocookie).
// @description:fi      Tekee YouTube-liittymästä kevyemmän, piilottaa avainsanalla varustetut videot, lisää latauspainikkeen ja avaa videon mainoksettomalle sivulle (upottaa youtube-nocookie).
// @description:it      Rende l'interfaccia di YouTube più leggera, nasconde i video con parole chiave, aggiunge un pulsante di download e apre il video su una pagina senza pubblicità (embed youtube-nocookie).
// @description:el      Καθιστά τη διεπαφή του YouTube πιο ελαφριά, αποκρύπτει τα βίντεο με λέξεις-κλειδιά, προσθέτει ένα κουμπί λήψης και ανοίγει το βίντεο σε μια σελίδα χωρίς διαφημίσεις (ενσωμάτωση youtube-nocookie).
// @description:eo      Faras la interfaco de YouTube pli malpeza, kaŝas videojn kun ŝlosilvortoj, aldonas elŝut-butonon kaj malfermas la videon en senanonca paĝo (enteni youtube-nocookie).
// @description:hu      Könnyebbé teszi a YouTube felületét, kulcsszavakkal elrejti a videókat, hozzáad egy letöltés gombot, és az videót hirdetések nélküli oldalon nyitja meg (beágyazott youtube-nocookie).
// @description:nb      Gjør YouTube-grensesnittet lettere, skjuler videoer med søkeord, legger til en nedlastingsknapp og åpner videoen på en annonsefri side (innbygg youtube-nocookie).
// @description:sk      Robí rozhranie YouTube ľahším, skrýva videá s kľúčovými slovami, pridáva tlačidlo na stiahnutie a otvára video na stránke bez reklám (vložiť youtube-nocookie).
// @description:sv      Gör YouTube-gränssnittet lättare, gömmer videor med nyckelord, lägger till en nedladdningsknapp och öppnar videon på en annonsfri sida (bädda in youtube).
// @description:sr      Прави интерфејс YouTube-а лакшим, сакрива видее са кључним речима, додаје дугме за преузимање и отвара видео на страници без реклама (уградња youtube-nocookie).
// @description:pl      Uczy interfejs YouTube'a lżejszym, ukrywa filmy z słowami kluczowymi, dodaje przycisk do pobierania i otwiera film na stronie bez reklam (osadzanie youtube-nocookie).
// @description:nl      Maakt de YouTube-interface lichter, verbergt video's met trefwoorden, voegt een downloadknop toe en opent de video op een advertentievrije pagina (insluiten youtube-nocookie).
// @description:de      Macht die YouTube-Benutzeroberfläche leichter, versteckt Videos mit Schlüsselwörtern, fügt einen Download-Button hinzu und öffnet das Video auf einer werbefreien Seite (einbetten youtube-nocookie).
// @description:da      Gør YouTube-grænsefladen lettere, skjuler videoer med søgeord, tilføjer en downloadknap og åbner videoen på en reklamefri side (indlejre youtube-nocookie).
// @description:cs      Dělá YouTube rozhraní lehčí, skrývá videa s klíčovými slovy, přidává tlačítko ke stažení a otevírá video na stránce bez reklam (vložit youtube-nocookie).
// @description:uk      Робить інтерфейс YouTube легшим, приховує відео з ключовими словами, додає кнопку завантаження та відкриває відео на сторінці без реклами (вбудовувати youtube-nocookie).
// @description:tr      YouTube arayüzünü daha hafif hale getirir, anahtar kelimelerle videoları gizler, indirme düğmesi ekler ve videoyu reklamsız bir sayfada açar (yerleştirme youtube-nocookie).
// @description:vi      Làm cho giao diện YouTube nhẹ hơn, ẩn đi các video có từ khóa, thêm nút tải xuống và mở video trên trang không có quảng cáo (nhúng youtube-nocookie).
// @description:fr-CA      Rend l'interface YouTube plus légère, masque les vidéos avec des mots-clés, ajoute un bouton de téléchargement et ouvre la vidéo sur une page sans publicité (intégrer youtube-nocookie au Canada).

// @match           https://www.youtube.com/*
// @match           https://m.youtube.com/*
// @match           https://music.youtube.com/*
// @match           https://youtu.be/*
// @match           https://www.youtube-nocookie.com/*
// @icon         https://icons.iconarchive.com/icons/designbolts/cute-social-media/256/Youtube-icon.png

// @grant        GM_addStyle
// @grant        GM_getValue
// @grant        GM_setValue
// @license      MIT
// @run-at      document-start

// @compatible      chrome
// @compatible      firefox
// @compatible      opera
// @compatible      edge
// @compatible      safari
// @compatible      berrybrowser
// ==/UserScript==


(function() {
    'use strict';

    let sessao = 1;
    let atualx = false;
    let videoId = getVideoIdFromUrl();
    let idiomaPadrao = "";

    // Define o valor inicial do select com base no idioma salvo
     if(GM_getValue('xidiomaSelecionado') == undefined){
        GM_setValue('xidiomaSelecionado', "en");
        idiomaPadrao = GM_getValue('xidiomaSelecionado');
      }

    // Lista de URLs de API conhecidas para capturar o IP
    const blockedApiUrls = [
        'https://api.ipify.org',
        'https://api.ipify.org?format=json',
        'https://ipinfo.io',
        'https://ipinfo.io/ip',
        'https://ipinfo.io/api',
        'https://api.ipapi.com',
        'https://www.iplocation.net',
        'https://api.iplocation.net',
        'https://website-cdn.ipinfo.io',
        'https://p.typekit.net',
        'https://use.typekit.net',
        'https://pagead2.googlesyndication.com',
        'https://www.gstatic.com',
        '/ip',
        '/ajax',
        '/ads',
        '/static',
        '/js',
        '/script',
        '/scripts',
        '/event',
        '/events',
        'https://accounts.youtube.com',
        'https://www.google.com',
        'https://www.google.com.br',
        '/api/session',
        'https://youtube.com',
        'https://www.youtube.com',
        'https://m.youtube.com',
        'https://play.google.com',
        '//googleads.g.doubleclick.net',
        'https://rr',
        '/youtubei',
        'https://yt3.ggpht.com',
        'https://i.ytimg.com',
        'https://rr5---sn-o097znze.googlevideo.com',
        'https://rr4---sn-5ufvuxaxxpgxap-hj1e.googlevideo.com',
        'https://rr2---sn-voxuxaxjvh-gxj6.googlevideo.com',
        'https://jnn-pa.googleapis.com',
        'https://suggestqueries-clients6.youtube.com',
        '/player',
        '/a',
        '/b',
        '/c',
        '/d',
        '/e',
        '/f',
        '/g',
        '/i',
        '/j',
        '/k',
        '/l',
        '/m',
        '/n',
        '/o',
        '/p',
        '/q',
        '/r',
        '/s',
        '/t',
        '/u',
        '/v',
        '/w',
        '/x',
        '/y',
        '/z',
        // Adicione mais URLs de API que deseja bloquear, se necessário
    ];


    // Intercepta as solicitações AJAX feitas pelo website
    var verifyc1 = false;
  if(window.location.href.includes("youtube.com")){
    const open = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function(method, url) {
        if (blockedApiUrls.some(apiUrl => url.startsWith(apiUrl))) {
            verifyc1 = true;
            limparCookies();
            addLinks();
            return; // Interrompe a execução da solicitação
        }
        open.apply(this, arguments);
    };
  }



  let bloquearFetch = true;
  var verifyc2 = false;

  function interceptarFetch(url, options) {
      //console.log('---->>', url);
    if (bloquearFetch && correspondeAUrlBloqueada(url)) {
      //console.log('Solicitação fetch bloqueada:', url);
      limparCookies();
      addLinks();
      verifyc2 = true;
      return Promise.resolve({ status: 200, body: 'A solicitação foi bloqueada.' });
    } else {
      return window.originalFetch.call(this, url, options);
    }
  }

  function correspondeAUrlBloqueada(url) {
    for (const urlBloqueada of blockedApiUrls) {
      if (url.startsWith(urlBloqueada)) {
        return true;
      }
    }
    return false;
  }

  // Substituir a função fetch globalmente
  if(window.location.href.includes("youtube.com")){
    window.originalFetch = window.fetch;
    window.fetch = interceptarFetch;
  }

  // Aguarde o evento de carregamento total da página
  window.addEventListener('load', function() {
    // Após o carregamento total da página, permitir todas as solicitações fetch
    bloquearFetch = false;
  });



  function getUrl(xxx) {
    try {
      if (typeof xxx !== 'string') {
        throw new Error('Input is not a string');
      }
      const url = new URL(xxx);
      const vParam = url.searchParams.get('v');

      if (vParam) {
        return vParam;
      }
    } catch (error) {
      console.error('ERROR "v":', error);
    }
    return null;
  }







  GM_addStyle('@import url("https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css");');



// Função para extrair o ID do vídeo da URL
function getVideoIdFromUrl() {
    const url = window.location.href;
    const match = url.match(/[?&]v=([^&]+)/);
    if (match && match[1]) {
        return match[1];
    }
    return null;
}





  // Recupere o texto salvo no armazenamento local
  var palavrasSalvas = GM_getValue('keyWords', '')

  function stringParaArray(xpalavrasChave) {
    const arrayDePalavras = xpalavrasChave.split(',');
    const palavrasLimparEspacos = arrayDePalavras
      .map(palavra => palavra.trim())
      .filter(palavra => palavra !== '');
    return palavrasLimparEspacos;
  }

  const palavrasChaveString = palavrasSalvas;
  const palavrasChave = stringParaArray(palavrasChaveString);;

  console.log(palavrasChave);

  function converterParaArray() {
      // Obtém o valor da textarea
      const listaTexto = document.getElementById('listaDeTermos').value;

      // Divide o texto em termos separados por vírgulas
      const termosArray = listaTexto.split(',');

      // Remove espaços em branco em excesso em cada termo
      const termosLimpos = termosArray.map(termo => termo.trim());

      // Exibe o resultado na página
      const resultado = document.getElementById('resultado');
      resultado.textContent = JSON.stringify(termosLimpos);
  }

  // Função para verificar se uma palavra-chave está presente em um elemento
  function verificaPalavrasChave(elemento) {
    var texto = elemento.textContent.toLowerCase();
    for (var i = 0; i < palavrasChave.length; i++) {
      var palavra = palavrasChave[i].toLowerCase();
      if (texto.includes(palavra)) {
        return true;
      }
    }
    return false;
  }


function getUrl(xxx) {
  try {
    if (typeof xxx !== 'string') {
      throw new Error('Input is not a string');
    }
    const url = new URL(xxx);
    const vParam = url.searchParams.get('v');

    if (vParam) {
      return vParam;
    }
  } catch (error) {
    console.error('ERROR "v":', error);
  }
  return null;
}



  // Função para remover tags "ytd-rich-item-renderer" com base nas palavras-chave
  function removeTagsComPalavrasChave() {
    var elementos = document.querySelectorAll("ytd-rich-item-renderer");
    elementos.forEach(function (elemento) {
      if (verificaPalavrasChave(elemento)) {
        elemento.remove();
      }
    });
  }






  // CÓDIGO IMPORTADO
  const equalText1 = "Skip Ads";
  const equalText2 = "Skip Ad";

  function addNewStyle(newStyle) {
      var styleElement = document.getElementById('styles_js');
      if (!styleElement) {
          styleElement = document.createElement('style');
          styleElement.type = 'text/css';
          styleElement.id = 'styles_js';
          document.getElementsByTagName('head')[0].appendChild(styleElement);
      }
      styleElement.appendChild(document.createTextNode(newStyle));
  }
  function skipAd(){
      if(document.getElementsByClassName("ytp-ad-skip-button").length > 0){
          if(document.getElementsByClassName("ytp-ad-skip-button")[0].childNodes[0].textContent === equalText1 || document.getElementsByClassName("ytp-ad-skip-button")[0].childNodes[0].textContent === equalText2){
              document.getElementsByClassName("ytp-ad-skip-button")[0].click();
          } else {
              setTimeout(skipAd(), 1000);
          }
      }
  }


    // Função para remover todos os elementos desnecessários
    function removerTagsScript() {
        if(sessao == 1 && window.location.href.includes("v=") !== true){
          addButtons();
          sessao = 2;
        }
        if(sessao == 2 && window.location.href.includes("v=") == true){
          window.location.reload();
        }

        setTimeout(function(){
          const scripts = document.querySelectorAll('script');
          scripts.forEach(function(script) {
              script.parentNode.removeChild(script);
          });

          const tagthumbnails = document.querySelectorAll('ytd-playlist-thumbnail');
          tagthumbnails.forEach(function(thumbnail) {
              thumbnail.parentNode.removeChild(thumbnail);
          });
          const tagthumbnail2s = document.querySelectorAll('ytd-moving-thumbnail-renderer');
          tagthumbnail2s.forEach(function(thumbnail2) {
              thumbnail2.parentNode.removeChild(thumbnail2);
          });
          const tagthumbnail3s = document.querySelectorAll('ytd-thumbnail-overlay-toggle-button-renderer');
          tagthumbnail3s.forEach(function(thumbnail3) {
              thumbnail3.parentNode.removeChild(thumbnail3);
          });
          const tagthumbnail4s = document.querySelectorAll('ytd-thumbnail-overlay-inline-unplayable-renderer');
          tagthumbnail4s.forEach(function(thumbnail4) {
              thumbnail4.parentNode.removeChild(thumbnail4);
          });
          const tagthumbnail5s = document.querySelectorAll('ytd-thumbnail-overlay-resume-playback-renderer');
          tagthumbnail5s.forEach(function(thumbnail5) {
              thumbnail5.parentNode.removeChild(thumbnail5);
          });

          const iconsets = document.querySelectorAll('iron-iconset-svg');
          iconsets.forEach(function(iconset) {
              iconset.parentNode.removeChild(iconset);
          });

          const recomendados = document.querySelectorAll('ytd-watch-next-secondary-results-renderer');
          recomendados.forEach(function(recomendado) {
              recomendado.parentNode.removeChild(recomendado);
          });
          const recomendado2s = document.querySelectorAll('ytd-statement-banner-renderer');
          recomendado2s.forEach(function(recomendado2) {
              recomendado2.parentNode.removeChild(recomendado2);
          });
          const ychats = document.querySelectorAll('ytd-live-chat-frame');
          ychats.forEach(function(ychat) {
              ychat.parentNode.removeChild(ychat);
          });
          const ycanvas = document.querySelectorAll('canvas');
          ycanvas.forEach(function(ycanva) {
              ycanva.parentNode.removeChild(ycanva);
          });
          const yminiplayers = document.querySelectorAll('ytd-miniplayer');
          yminiplayers.forEach(function(yminiplayer) {
              yminiplayer.parentNode.removeChild(yminiplayer);
          });

          const ythirds = document.querySelectorAll('ytd-third-party-manager');
          ythirds.forEach(function(ythird) {
              ythird.parentNode.removeChild(ythird);
          });
          const yannouncers = document.querySelectorAll('iron-a11y-announcer');
          yannouncers.forEach(function(yannouncer) {
              yannouncer.parentNode.removeChild(yannouncer);
          });
          const ymediaQuerys = document.querySelectorAll('iron-media-query');
          ymediaQuerys.forEach(function(ymediaQuery) {
              ymediaQuery.parentNode.removeChild(ymediaQuery);
          });
          const ytdAds = document.querySelectorAll('ytd-ad-slot-renderer');
          ytdAds.forEach(function(ytdAd) {
              ytdAd.parentNode.removeChild(ytdAd);
          });
          const ytdAd3s = document.querySelectorAll('ytd-merch-shelf-renderer');
          ytdAd3s.forEach(function(ytdAd3) {
              ytdAd3.parentNode.removeChild(ytdAd3);
          });
          const ytdAd4s = document.querySelectorAll('tp-yt-paper-dialog');
          ytdAd4s.forEach(function(ytdAd4) {
              ytdAd4.parentNode.removeChild(ytdAd4);
          });
          const ytdAd5s = document.querySelectorAll('ytd-action-companion-ad-renderer');
          ytdAd5s.forEach(function(ytdAd5) {
              ytdAd5.parentNode.removeChild(ytdAd5);
          });
          const ytdAd6s = document.querySelectorAll('ytm-video-with-context-renderer');
          ytdAd6s.forEach(function(ytdAd6) {
              ytdAd6.parentNode.removeChild(ytdAd6);
          });
          const ytdAd7s = document.querySelectorAll('ytm-continuation-item-renderer');
          ytdAd7s.forEach(function(ytdAd7) {
              ytdAd7.parentNode.removeChild(ytdAd7);
          });

          const videosAds = document.querySelectorAll('.video-ads');
          if(videosAds){
            if (videosAds.length > 0) {
            videosAds.forEach(function(videosAd) {
                videosAd.parentNode.removeChild(videosAd);
              });
            }
          }



          if(GM_getValue('imgShow') !== undefined && GM_getValue('imgShow') == "no"){
            const thumbnails = document.querySelectorAll('#thumbnail');
            if (thumbnails) {
              thumbnails.forEach(function(xthumbnail) {
                  if(xthumbnail.href == undefined){
                    xthumbnail.parentNode.removeChild(xthumbnail);
                  }else if(xthumbnail.href.includes("/shorts/") == true){
                    console.log(xthumbnail.href)
                  }else{
                    xthumbnail.parentNode.removeChild(xthumbnail);
                  }
              });
            }
          }

          if(GM_getValue('shortsShow') == undefined || GM_getValue('shortsShow') == "no"){
                const shortsOpt = document.querySelectorAll('#endpoint');
                if(shortsOpt){
                  if (shortsOpt.length > 0) {
                  shortsOpt.forEach(function(shots) {
                      if(shots.title == "Shorts"){
                        shots.parentNode.removeChild(shots);
                      }
                    });
                  }
                }

              let mediaElements = document.querySelectorAll('video, audio');
              if(mediaElements){
                mediaElements.forEach(function (media) {
                  if (typeof media.play === 'function') {
                      media.play = function () {};
                    }
                  });
              }

              const xplayers = document.querySelectorAll('ytd-player');
              xplayers.forEach(function(player) {
                  player.parentNode.removeChild(player);
              });
              const interactions = document.querySelectorAll('yt-interaction');
              interactions.forEach(function(interaction) {
                  interaction.parentNode.removeChild(interaction);
              });

              const renderers = document.querySelectorAll('ytd-rich-shelf-renderer');
              renderers.forEach(function(renderer) {
                  renderer.parentNode.removeChild(renderer);
              });

              const ytdAd2s = document.querySelectorAll('ytd-rich-section-renderer');
              ytdAd2s.forEach(function(ytdAd2) {
                  ytdAd2.parentNode.removeChild(ytdAd2);
              });

              const recomendado3s = document.querySelectorAll('ytd-reel-shelf-renderer');
              recomendado3s.forEach(function(recomendado3) {
                  recomendado3.parentNode.removeChild(recomendado3);
              });
              const ytshots = document.querySelectorAll('ytd-shorts');
              ytshots.forEach(function(shotsPage) {
                  shotsPage.parentNode.removeChild(shotsPage);
              });

          }



          const previews = document.querySelectorAll('.ytp-gradient-top');
          if(previews){
            if (previews.length > 0) {
            previews.forEach(function(preview) {
                preview.style.display = 'none';
                preview.parentNode.removeChild(preview);
              });
            }
          }
          const previews2 = document.querySelectorAll('#hover-overlays');
          if(previews2){
            if (previews2.length > 0) {
            previews2.forEach(function(preview) {
                preview.style.display = 'none';
                preview.parentNode.removeChild(preview);
              });
            }
          }
          const previews3 = document.querySelectorAll('#mouseover-overlay');
          if(previews3){
            if (previews3.length > 0) {
            previews3.forEach(function(preview) {
                preview.style.display = 'none';
                preview.parentNode.removeChild(preview);
              });
            }
          }



          if(window.location.href.includes("youtube.com")){
              skipAd();
          }

        // Selecione todos os elementos do DOM
        var allElements = document.querySelectorAll('*');
        // Itere por todos os elementos e remova os manipuladores de eventos de clique
        allElements.forEach(function(element) {
            element.click = "";
            element.keydown = "";
            element.mousedown = "";
            element.down = "";
            element.attached = "";
            //element.onclick = "";
            element.auxclick = "";
            element.dblclick = "";
            element.copy = "";
            element.change = "";
            element.keypress = "";
            element.mouseover = "";
        });


          // Obtém todos os elementos pelo ID e os remove
          let currentURL = window.location.href;
          if (currentURL.includes("v=")) {
              const playerPrincipal = document.querySelectorAll('#player-container-outer');
              for (const element of playerPrincipal) {
                  element.remove();
                };
              const allSecundary = document.querySelectorAll('#secondary');
              for (const element of allSecundary) {
                  element.remove();
                };
              const primaryx = document.querySelector('#primary');
              if (primaryx) {
                  primaryx.style.maxWidth = "720px";
                  primaryx.style.margin = "auto";
                  primaryx.style.padding = "2px 10px";
                }
            };
          const playerAds = document.querySelectorAll('#player-ads');
          for (const element of playerAds) {
              element.remove();
            };
          const alertRemoves = document.querySelectorAll('#clarify-box');
          for (const element of alertRemoves) {
              element.remove();
            };
          const elementsToRemove = document.querySelectorAll('#video-preview');
          for (const element of elementsToRemove) {
              element.remove();
            };

          const adsInfo = document.querySelectorAll('#ads-info-button');
          for (const element of adsInfo) {
              element.remove();
            };

      }, 500);
    }

  let errorPlay = false;
  function tagsNonePlay(){
    const vernoYt = document.querySelector('.ytp-impression-link');
    if (vernoYt) {
        vernoYt.style.display = "none";
      }
    const pausenokoo = document.querySelector('.ytp-pause-overlay');
    if (pausenokoo) {
        pausenokoo.style.display = "none";
      }
    const notificKoo1 = document.querySelector('.ytp-info-panel-preview');
    if (notificKoo1) {
        notificKoo1.style.display = "none";
      }
    const notificKoo2 = document.querySelector('.html5-endscreen.ytp-player-content.videowall-endscreen.ytp-endscreen-paginate.ytp-show-tiles');
    if (notificKoo2) {
        notificKoo2.style.display = "none";
      }
    const errorx1 = document.querySelector('.ytp-error-content');
    if (errorx1 && errorPlay == false) {
        errorPlay = true;
        let notError= document.querySelector('.ytp-error-content-wrap');
        let videoId = "";
        let currentURL = window.location.href;
          var urlxx = currentURL;
          var videoCode = urlxx.match(/embed\/([A-Za-z0-9_-]+)/);
          if (videoCode && videoCode.length > 1) {
              var codigoDoVideo = videoCode[1];
              videoId = codigoDoVideo;
          }
        idiomaPadrao = GM_getValue('xidiomaSelecionado');
        notError.innerHTML = `
        <div class="ytp-error-content-wrap-reason">
          <span>Youtube Lite (error). Options:</span></div>
        <div class="ytp-error-content-wrap-subreason">
          <div style="line-height: 1.8">
            <a style="text-decoration: none" href="https://invidious.slipfox.xyz/latest_version?id=${videoId}">→ Open with Player 2</a>
            <br>
            <a style="text-decoration: none" href="https://riservato-xyz.frama.io/watch/?v=${videoId}">→ Open with Player 3</a>
            <br>
            <a style="text-decoration: none" href="https://invidious.slipfox.xyz/watch?v=${videoId}&dark_mode=true&hl=${idiomaPadrao}&iv_load_policy=3&quality=medium&related_videos=false&region=3166&controls=1&player_style=youtube" target="_blank">→ Open in Invidious</a>
        </div>`;
        let baixeError = document.querySelector('.ytp-small-redirect');
        baixeError.innerHTML = `<i class="bi bi-download"></i>`;
        baixeError.href = `https://www.y2mate.com/pt/youtube/${videoId}`;
        baixeError.title = "Download";
        baixeError.style.fontSize = "2.1rem";
        baixeError.setAttribute('target', '_blank');
      }
  }


    function addLinks(){
      // Troca links
      function removaTudo(event) {
        event = ``;
      }

      const richItemRenderers = document.querySelectorAll('ytd-rich-item-renderer');
      const brocken = document.querySelectorAll('body');
      for (const xbrocken of brocken) {
        const childElements = xbrocken.querySelectorAll('*'); // Seleciona todos os elementos filhos do elemento
          childElements.forEach((retiraEvento) => {
            retiraEvento.removeEventListener('click', removaTudo(this));
            retiraEvento.removeEventListener('mousedown', removaTudo(this));
            retiraEvento.removeEventListener('down', removaTudo(this));
            retiraEvento.removeEventListener('pointerdown', removaTudo(this));
            retiraEvento.removeEventListener('mouseover', removaTudo(this));
            retiraEvento.removeEventListener('keypress', removaTudo(this));
            retiraEvento.removeEventListener('keydown', removaTudo(this));
            retiraEvento.removeEventListener('load', removaTudo(this));
            retiraEvento.removeEventListener('yt-action', removaTudo(this));
            retiraEvento.removeEventListener('mouseenter', removaTudo(this));
            retiraEvento.removeEventListener('mouseleave', removaTudo(this));
            retiraEvento.removeEventListener('wheel', removaTudo(this));
          });
      };
      //alert(richItemRenderers)
      for (const renderer of richItemRenderers) {
        idiomaPadrao = GM_getValue('xidiomaSelecionado');
        const links = renderer.querySelectorAll('a');
        for (const link of links) {
          if (link.href.indexOf('v=') !== -1) {
            let linkID = getUrl(link.href);
            link.setAttribute('href', `https://www.youtube-nocookie.com/embed/${linkID}?rel=0&controls=2&color=red&iv_load_policy=3&showinfo=0&modestbranding=1&hl=${idiomaPadrao}&autoplay=1`);
            link.setAttribute('target', '_blank')
            //link.setAttribute('onclick', `event.preventDefault(); window.location.href='https://www.youtube-nocookie.com/embed/${linkID}?rel=0&controls=2&color=red&iv_load_policy=3&showinfo=0&modestbranding=1&hl=${idiomaPadrao}&autoplay=1', '_blank';`);
          }
        }
      }
    }




    // Função para criar o iframe personalizado
    function createCustomIframe(videoId) {
      document.body.innerHTML = ``;
    }


    // Função para limpar todos os cookies do site na primeira vez
    function limparCookies() {
        if(localStorage.getItem('verificarCookies') == null){
            localStorage.setItem('verificarCookies', "primeiraVez");
        }
        if (localStorage.getItem('verificarCookies') == "primeiraVez" || localStorage.getItem('verificarVersao') !== "2.7"){
          localStorage.setItem('verificarVersao', "2.7");
          alert("Note: You are accessing this version 2.7 of Youtube Lite for the first time. To ensure its correct functioning, we will clear the cookies and restart the page.")
          localStorage.setItem('verificarCookies', "tudoSuave");
          var cookies = document.cookie.split(';');
          for (var i = 0; i < cookies.length; i++) {
              var cookie = cookies[i];
              var igualPos = cookie.indexOf('=');
              var nome = igualPos > -1 ? cookie.substr(0, igualPos) : cookie;
              document.cookie = nome + '=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/';
          }
          window.location.reload();
        }
    }





  function addButtons(){
    if(window.location.href.includes("v=") !== true && window.location.href.includes("youtube-nocookie.com") !== true){

      let imgX = "yes";
      let shortX = "no";

      if(GM_getValue('imgShow') == undefined){ //imagem hidden
         GM_setValue('imgShow', "yes");
      }
      if(GM_getValue('imgShow') !== undefined){
        imgX = GM_getValue('imgShow');
      }
      if(GM_getValue('shortsShow') == undefined){ //shorts hidden
         GM_setValue('shortsShow', "no");
      }
      if(GM_getValue('shortsShow') !== undefined){
        shortX = GM_getValue('shortsShow');
      }

      var xmyMenus = document.createElement('div');
      xmyMenus.style.position = 'absolute';
      xmyMenus.id = 'xmenus';
      xmyMenus.style.width = '80%';
      xmyMenus.style.height = '40px';
      xmyMenus.style.top = '52px';
      xmyMenus.style.right = '2%';
      xmyMenus.style.textAlign = 'center';
      xmyMenus.style.zIndex = '999';
      xmyMenus.style.marginTop = '1px';
      xmyMenus.style.borderBottom = '1px solid #332a73';
      xmyMenus.style.backgroundColor = 'rgba(3, 3, 4, 0.12)';
      xmyMenus.style.borderRadius = '5px';

      // Cria o botão "Editar Palavras"
      var editarPalavrasButton = document.createElement('button');
      editarPalavrasButton.className = 'buttonsLite';
      editarPalavrasButton.title = 'List of keywords to hide videos';
      editarPalavrasButton.style.fontSize = '17px';
      editarPalavrasButton.style.marginTop = '9px';
      editarPalavrasButton.style.backgroundColor = '#000';
      editarPalavrasButton.style.color = '#fff';
      editarPalavrasButton.style.height = '27px';
      editarPalavrasButton.style.padding = '2px 1.5%';
      editarPalavrasButton.innerHTML = "<i class='bi bi-card-list'></i> → <i class='bi bi-trash3'></i>";

      var gaveta = document.createElement('div');
      gaveta.style.position = 'fixed';
      gaveta.id = 'gavetax';
      gaveta.style.top = '40px';
      gaveta.style.zIndex = '9999';
      gaveta.style.width = '320px';
      gaveta.style.height = '170px';
      gaveta.style.right = '50%';
      gaveta.style.left = '50%';
      gaveta.style.textAlign = 'center';
      gaveta.style.transform = 'translate(-50%, 12%)';
      gaveta.style.border = '1px solid #fff';
      gaveta.style.borderRadius = '5px';
      gaveta.style.backgroundColor = 'rgba(14, 10, 28, 0.94)';
      gaveta.style.overflow = 'hidden';
      gaveta.style.display = 'none';

      var textarea = document.createElement('textarea');
      textarea.style.width = '200px';
      textarea.style.width = '93%';
      textarea.style.height = '130px';
      textarea.style.backgroundColor = '#0d0d0f';
      textarea.style.color = '#fff';
      textarea.style.padding = '5px 9px';
      textarea.style.lineHeight = '1.5';
      textarea.style.border = 'none';
      textarea.style.borderBottom = 'solid 1px gray';
      textarea.placeholder = 'Exemples: futebol, Big Brother, etc';
      textarea.value = palavrasSalvas;

      var salvarButton = document.createElement('button');
      salvarButton.className = 'buttonsLite';
      salvarButton.style.marginTop = '2px';
      salvarButton.style.width = '85%';
      salvarButton.style.padding = '2px 10px';
      salvarButton.style.backgroundColor = '#000';
      salvarButton.style.color = '#fff';
      salvarButton.innerHTML = 'Save and hide all';

      var cancelarTag = document.createElement('button');
      cancelarTag.className = 'buttonsLite';
      cancelarTag.style.marginTop = '2px';
      cancelarTag.style.marginLeft = '5px';
      cancelarTag.style.width = '10%';
      cancelarTag.style.padding = '2px 10px';
      cancelarTag.style.backgroundColor = '#000';
      cancelarTag.style.color = '#fff';
      cancelarTag.innerHTML = 'X';
      //cancelarTag.setAttribute("onclick", "document.getElementById('gavetax').style.display = 'none';")

      var toggleImg = document.createElement('button');
      toggleImg.className = 'buttonsLite';
      toggleImg.title = 'Toggle';
      toggleImg.style.fontSize = '17px';
      toggleImg.style.marginTop = '9px';
      toggleImg.style.backgroundColor = '#000';
      toggleImg.style.color = '#fff';
      toggleImg.style.height = '27px';
      toggleImg.style.marginLeft = '10px';
      toggleImg.style.padding = '2px 1.5%';
      toggleImg.innerHTML = `<i id='mudeImg' class='bi bi-image-fill'></i> → ${imgX}`;

      var toggleShorts = document.createElement('button');
      toggleShorts.className = 'buttonsLite';
      toggleShorts.title = 'Toggle';
      toggleShorts.style.fontSize = '17px';
      toggleShorts.style.marginTop = '9px';
      toggleShorts.style.backgroundColor = '#000';
      toggleShorts.style.color = '#fff';
      toggleShorts.style.height = '27px';
      toggleShorts.style.marginLeft = '10px';
      toggleShorts.style.padding = '2px 1.5%';
      toggleShorts.innerHTML = `<img style="float: left; height: 16px; margin-top: 2px;" src=" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABE0lEQVRIibWWUbGDMBBFKwEJSKgEJCChDirhVUId8BwUB42D1kGrYA8OeB9sZxgmuwnJa2buDwnnbpbcDIdDwQAa4AzcVTegK2HF4CfgBcwRDTXgTquNgdfq94JbYMgAf/TYA7+wjFz4DMw54N7pc52BVl0EVo0evKuEz+5xBcbYSyIyicjkgXXeP0FAMACBJVxXY/4JtC48ZbBaczTWDUCTMrAqDJG1PfDeZsA1ARqj1zGDBviJrL2mdnHUnpoGLPcRxm5xDYx2BX3WaRuqk7z9Fg8y7yMRmVLwaBZ26NeDVyVZD0j7reqDC1cDK2ie3sDJBa8MrKBZupBKb+E3GJPtKNzFk//4e2BJ6vqeye/zZvwBitjBRqJM6NMAAAAASUVORK5CYII=">
      → ${shortX}`;






    // Array de idiomas disponíveis
    const idiomas = [
        "Português", "pt-BR",
        "Español", "es",
        "English", "en",
        "Français", "fr",
        "Русский", "ru",
        "日本語", "ja",
        "한국어", "ko",
        "繁體中文", "zh-tw",
        "简体中文", "zh-cn",
        "Bahasa Indonesia", "id",
        "Uyghur", "ug",
        "العربية", "ar",
        "עברית", "he",
        "हिन्दी", "hi",
        "ไทย", "th",
        "Български", "bg",
        "Română", "ro",
        "Suomi", "fi",
        "Italiano", "it",
        "Ελληνικά", "el",
        "Esperanto", "eo",
        "Magyar", "hu",
        "Norsk Bokmål", "nb",
        "Slovenčina", "sk",
        "Svenska", "sv",
        "Српски", "sr",
        "Polski", "pl",
        "Nederlands", "nl",
        "Deutsch", "de",
        "Dansk", "da",
        "Čeština", "cs",
        "Українська", "uk",
        "Türkçe", "tr",
        "Tiếng Việt", "vi",
        "Français canadien", "fr-CA"
    ];

    // Recupera o idioma salvo
    const idiomaSalvo = GM_getValue('xidiomaSelecionado', idiomas[0]);

    // Cria o elemento select
    const selectIdioma = document.createElement('select');
    selectIdioma.id = 'selectIdioma';
    selectIdioma.className = 'buttonsLite';
    selectIdioma.title = 'Select your language';
    selectIdioma.style.width = '120px';
    selectIdioma.style.fontSize = '17px';
    selectIdioma.style.marginTop = '9px';
    selectIdioma.style.backgroundColor = '#000';
    selectIdioma.style.color = '#fff';
    selectIdioma.style.height = '27px';
    selectIdioma.style.marginLeft = '10px';
    selectIdioma.style.padding = '2px 1.5%';

    // Adiciona as opções de idiomas ao select
    for (let i = 0; i < idiomas.length; i += 2) {
        const option = document.createElement('option');
        option.value = idiomas[i + 1];
        option.text = idiomas[i];
        selectIdioma.appendChild(option);
    }

    selectIdioma.value = idiomaSalvo;

    // Adiciona um evento de mudança ao select
    selectIdioma.addEventListener('change', function() {
        // Salva o novo idioma selecionado
        GM_setValue('xidiomaSelecionado', this.value);
        idiomaPadrao = GM_getValue('xidiomaSelecionado');

        alert('Done. The page will reload with your language.');
        window.location.reload();
    });

    console.log(GM_getValue('xidiomaSelecionado'));
    console.log(idiomaPadrao);



      // Adiciona os elementos criados como filhos de xmyMenus
      xmyMenus.appendChild(editarPalavrasButton);
      gaveta.appendChild(textarea);
      gaveta.appendChild(salvarButton);
      gaveta.appendChild(cancelarTag);

      xmyMenus.appendChild(toggleImg);
      xmyMenus.appendChild(toggleShorts);
      xmyMenus.appendChild(selectIdioma);

      document.body.appendChild(xmyMenus);
      document.body.appendChild(gaveta);







      // Adicione um evento de clique ao botão de abrir a gaveta
      editarPalavrasButton.addEventListener('click', function() {
          gaveta.style.display = 'block';
      });

      // Adicione um evento de clique ao botão de salvar
      salvarButton.addEventListener('click', function() {
          var palavrasSalvas = textarea.value;
          GM_setValue('keyWords', palavrasSalvas);
          alert('Saved! The page will reload to activate hiding the new keywords.');
          gaveta.style.display = 'none';
          window.location.reload();
      });
      cancelarTag.addEventListener('click', function() {
          gaveta.style.display = "none";
      });

      toggleImg.addEventListener('click', function() {
          if(GM_getValue('imgShow') == "yes"){
             GM_setValue('imgShow', "no");
             toggleImg.innerHTML = "<i class='bi bi-image-fill'></i> → no";
          }else{
            GM_setValue('imgShow', "yes");
            toggleImg.innerHTML = "<i class='bi bi-image-fill'></i> → yes";
          }
      });

      toggleShorts.addEventListener('click', function() {
          if(GM_getValue('shortsShow') == "no"){
             GM_setValue('shortsShow', "yes");
             toggleShorts.innerHTML = `<img style="float: left; height: 16px; margin-top: 2px;" src=" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABE0lEQVRIibWWUbGDMBBFKwEJSKgEJCChDirhVUId8BwUB42D1kGrYA8OeB9sZxgmuwnJa2buDwnnbpbcDIdDwQAa4AzcVTegK2HF4CfgBcwRDTXgTquNgdfq94JbYMgAf/TYA7+wjFz4DMw54N7pc52BVl0EVo0evKuEz+5xBcbYSyIyicjkgXXeP0FAMACBJVxXY/4JtC48ZbBaczTWDUCTMrAqDJG1PfDeZsA1ARqj1zGDBviJrL2mdnHUnpoGLPcRxm5xDYx2BX3WaRuqk7z9Fg8y7yMRmVLwaBZ26NeDVyVZD0j7reqDC1cDK2ie3sDJBa8MrKBZupBKb+E3GJPtKNzFk//4e2BJ6vqeye/zZvwBitjBRqJM6NMAAAAASUVORK5CYII=">
      → yes`;
          }else{
            GM_setValue('shortsShow', "no");
            toggleShorts.innerHTML = `<img style="float: left; height: 16px; margin-top: 2px;" src=" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABE0lEQVRIibWWUbGDMBBFKwEJSKgEJCChDirhVUId8BwUB42D1kGrYA8OeB9sZxgmuwnJa2buDwnnbpbcDIdDwQAa4AzcVTegK2HF4CfgBcwRDTXgTquNgdfq94JbYMgAf/TYA7+wjFz4DMw54N7pc52BVl0EVo0evKuEz+5xBcbYSyIyicjkgXXeP0FAMACBJVxXY/4JtC48ZbBaczTWDUCTMrAqDJG1PfDeZsA1ARqj1zGDBviJrL2mdnHUnpoGLPcRxm5xDYx2BX3WaRuqk7z9Fg8y7yMRmVLwaBZ26NeDVyVZD0j7reqDC1cDK2ie3sDJBa8MrKBZupBKb+E3GJPtKNzFk//4e2BJ6vqeye/zZvwBitjBRqJM6NMAAAAASUVORK5CYII=">
      → no`;
          }
      });

        const youtubeTag = document.querySelector('ytd-app');
        if (youtubeTag) {
          youtubeTag.setAttribute('id', 'ytdLite');
          youtubeTag.style.marginTop = '40px';
          //document.getElementById("guide").innerHTML += myMenus;
        }
    }

      // Estilização
        const estiloHover = document.createElement('style');

        // Defina o conteúdo CSS para o efeito de hover
        estiloHover.innerHTML = `
          .buttonsLite{
            border: solid 1px aliceblue;
            border-radius: 5px;
            width: 100px;
          }
          .buttonsLite:hover{
            border: solid 1px #2f6797;
            background-color: rgb(6, 7, 15)
          }
          ytd-rich-item-renderer{
            border: solid 1px #0a0913ad;
            background-color: rgba(0, 0, 0, 0.44);
            border-radius: 1.1rem;
          }
          ytd-rich-item-renderer:hover {
            border: solid 1px #3f3c93;
            border-radius: 1.1rem;
            text-shadow: .5px 1px 6px #2e2451;
            background-color: rgba(0, 0, 0, 0.65);
          }
          ytd-video-renderer{
            border: solid 1px #0a0913ad;
            background-color: rgba(0, 0, 0, 0.44);
            border-radius: 1.1rem;
          }
          ytd-video-renderer:hover{
            border: solid 1px #3f3c93;
            border-radius: 1.1rem;
            text-shadow: .5px 1px 6px #2e2451;
            background-color: rgba(0, 0, 0, 0.65);
          }
        `;
        document.body.appendChild(estiloHover);
  }






    // Função para verificar a URL a cada 2 segundos
    function checkURL() {
        const currentURL = window.location.href;
        removeTagsComPalavrasChave();
        if (currentURL !== localStorage.getItem('lastCheckedURL') && currentURL.includes("v=")) {
            localStorage.setItem('trocou', "false");
            localStorage.setItem('trocardeNovo', "true");
            localStorage.setItem('atualReload', "false");
          if(currentURL !== localStorage.getItem('lastCheckedURL')){
              localStorage.setItem('lastCheckedURL', currentURL);
              window.location.reload();
            }
        }
      if(currentURL.includes("v=") && atualx == false){
        atualx = true;
        idiomaPadrao = GM_getValue('xidiomaSelecionado');
          setTimeout(function(){
            setTimeout(function(){
            const addPlayer1 = document.querySelector('#full-bleed-container');
            const addPlayer2 = document.querySelector('#player-container-id');
              if(addPlayer1){
                addPlayer1.style.textAlign = "center";
                addPlayer1.innerHTML = ``;
                addPlayer1.innerHTML += `<iframe style="width: 99%;max-width: 720px; border-radius: 1rem; height: 70%; height: 320px; margin-left: -1%;" id="xplayer" src="https://www.youtube-nocookie.com/embed/${videoId}?rel=0&controls=2&color=red&iv_load_policy=3&showinfo=0&modestbranding=1&hl=${idiomaPadrao}&autoplay=1" allow="accelerometer; autoplay='autoplay'; gyroscope; picture-in-picture" frameborder="0" frameborder="autoplay" scrolling="no" referrerpolicy="no-referrer" allowfullscreen=""></iframe>`;
              }else if(addPlayer2){
                let removeIt = document.querySelector('.player-size.player-placeholder');
                addPlayer2.style.position = "relative";
                removeIt.style.display = "none";
                addPlayer2.style.textAlign = "center";
                addPlayer2.innerHTML = ``;
                addPlayer2.innerHTML += `<iframe style="width: 99%;max-width: 720px; border-radius: 1rem; height: 70%; height: 320px; margin-left: -1%;" id="xplayer" src="https://www.youtube-nocookie.com/embed/${videoId}?rel=0&controls=2&color=red&iv_load_policy=3&showinfo=0&modestbranding=1&hl=${idiomaPadrao}&autoplay=0" allow="accelerometer; autoplay='autoplay'; gyroscope; picture-in-picture" frameborder="0" frameborder="autoplay" scrolling="no" referrerpolicy="no-referrer" allowfullscreen=""></iframe>`;
              }else{
                window.location.reload();
              }
            }, 500);
          }, 1500);
      }
      if (currentURL.includes("youtube.com")) {
          removerTagsScript();
        }
      if (currentURL.includes("youtube-nocookie.com/embed")) {
          tagsNonePlay();
      }
    }







      // Objeto que mapeia classes ou IDs de elementos para estilos de substituição
      const estilosParaSubstituir = {
          // INTERFACE
          'ytp-cued-thumbnail-overlay-image': 'background-position: center;background-repeat: no-repeat;background-attachment: fixed;background-size: 99% auto;', //campo inicial
          'ytp-gradient-top': 'height: 20px;',
        // Adicione mais pares de classes ou IDs aqui
      };

        // Função para substituir estilos CSS em elementos
        function substituirEstilos() {
            for (const seletor in estilosParaSubstituir) {
                const elementos = document.querySelectorAll(`.${seletor}, #${seletor}`);
                //alert(elementos);
                elementos.forEach(elemento => {
                    elemento.style.cssText += estilosParaSubstituir[seletor];
                });
            }
          }





     function notificaAlert() {
      document.title = "Youtube (Lite)";
      let currentURL = window.location.href;
        if (currentURL.includes("youtube-nocookie.com/embed")) {
        setTimeout(function(){
          substituirEstilos();
          let videoId = "";
          var urlxx = currentURL;
          var videoCode = urlxx.match(/embed\/([A-Za-z0-9_-]+)/);
          if (videoCode && videoCode.length > 1) {
              var codigoDoVideo = videoCode[1];
              videoId = codigoDoVideo;
          }

            var pageProject = document.querySelector(".ytp-title-link.yt-uix-sessionlink");
            if (pageProject) {
                var novaTagp = document.createElement("a");
                novaTagp.style.fontSize = "1.2rem";
                novaTagp.style.display = "inline-block";
                novaTagp.style.height = "35px";
                novaTagp.style.width = "100%";
                novaTagp.style.padding = "0px 5%";
                novaTagp.style.textAlign = "center";
                novaTagp.style.textShadow = "1px 2px 4px #3b3bf4";
                novaTagp.setAttribute('target', '_blank')

                idiomaPadrao = GM_getValue('xidiomaSelecionado');
                novaTagp.href = `http://greasyfork.icu/${idiomaPadrao}/scripts/476133-youtube-lite-melhor-experi%C3%AAncia`;
                //novaTagp.setAttribute('onclick', `event.preventDefault(); window.location.href='http://greasyfork.icu/${idiomaPadrao}/scripts/476133-youtube-lite-melhor-experi%C3%AAncia', '_blank';`);

                novaTagp.innerHTML = `<i class="bi bi-code-slash"></i> <span>open Youtube Lite project page</span>`;
                // Substitui o elemento original pelo novo elemento
                pageProject.parentNode.replaceChild(novaTagp, pageProject);
            }

            var invidiousPage = document.querySelector(".ytp-youtube-button.ytp-button.yt-uix-sessionlink");
            if (invidiousPage) {
                var novaTagV = document.createElement("a");
                novaTagV.style.fontSize = "1.3rem";
                novaTagV.style.display = "inline-block";
                novaTagV.style.float = "left";
                novaTagV.style.height = "40px";
                novaTagV.style.padding = "0px 10px";
                novaTagV.title = "Open video in Invidious";

                idiomaPadrao = GM_getValue('xidiomaSelecionado');
                novaTagV.href = `https://invidious.slipfox.xyz/watch?v=${videoId}&dark_mode=true&hl=${idiomaPadrao}&iv_load_policy=3&quality=medium&related_videos=false&region=3166&controls=1&player_style=youtube`;
                novaTagV.setAttribute('target', '_blank')

                novaTagV.innerHTML = `<img style="max-height: 23px; width: auto; margin: 8px 0px" src="https://invidious.snopyta.org/favicon-32x32.png">`;
                invidiousPage.parentNode.replaceChild(novaTagV, invidiousPage);
            }
          var filmSimple = document.querySelector(".ytp-right-controls");
            if (filmSimple) {
                var novaTagC = document.createElement("a");
                novaTagC.style.fontSize = "1.3rem";
                novaTagC.style.display = "inline-block";
                novaTagC.style.float = "left";
                novaTagC.style.height = "40px";
                novaTagC.style.padding = "0px 10px";
                novaTagC.title = "Simple video";

                novaTagC.href = `https://invidious.slipfox.xyz/latest_version?id=${videoId}`;

                novaTagC.innerHTML = `<i class="bi bi-film"></i>`;
                filmSimple.appendChild(novaTagC);
            }
          var downloadRun = document.querySelector(".ytp-right-controls");
            if (downloadRun) {
                var novaTagD = document.createElement("a");
                novaTagD.style.fontSize = "1.3rem";
                novaTagD.style.display = "inline-block";
                novaTagD.style.float = "left";
                novaTagD.style.height = "40px";
                novaTagD.style.padding = "0px 10px";
                novaTagD.title = "Download";
                novaTagD.setAttribute('target', '_blank')

                novaTagD.href = `https://www.y2mate.com/pt/youtube/${videoId}`;

                novaTagD.innerHTML = `<i class="bi bi-download"></i>`;
                downloadRun.appendChild(novaTagD);
            }
        }, 1000);


      }
      setInterval(checkURL, 550);
      addButtons()

      // Verifica a URL quando o script é carregado pela primeira vez
      let videoId = getVideoIdFromUrl();

      setTimeout(function(){
        if(verifyc1 == true){
          console.log("IPBLOCK: IP capture attempt blocked.");
        }
        if(verifyc2 == true){
          console.log("IPBLOCK: Fetch request attempt blocked.");
        }

      },1000);
    }

    window.addEventListener('load', notificaAlert);

})();