Simplifica a pagina Rede Canais removendo elementos de contato, comentarios e outros. Além de adicionar alguns botões para ajudar a encontrar mais filmes
// ==UserScript== // @name Rede Canais modo simplificado // @name:pt Rede Canais modo simplificado // @name:pt-BR Rede Canais modo simplificado // @name:pt-PT Rede Canais modo simplificado // @name:en Rede Canais simplified mode // @namespace http://tampermonkey.net/ // @version 1.2.2 // @description Simplifica a pagina Rede Canais removendo elementos de contato, comentarios e outros. Além de adicionar alguns botões para ajudar a encontrar mais filmes // @description:pt Simplifica a pagina Rede Canais removendo elementos de contato, comentarios e outros. Além de adicionar alguns botões para ajudar a encontrar mais filmes // @description:pt-BR Simplifica a pagina Rede Canais removendo elementos de contato, comentarios e outros. Além de adicionar alguns botões para ajudar a encontrar mais filmes // @description:pt-PT Simplifica a pagina Rede Canais removendo elementos de contato, comentarios e outros. Além de adicionar alguns botões para ajudar a encontrar mais filmes // @description:en Simplifies the Rede Canais page by removing contact elements, comments and others. As well as adding some buttons to help you find more movies // @author Pedro Henrique // @match *://redecanais.la/* // @match *://redecanaistv.la/* // @match *://redecanais.zip/* // @match *://redecanaistv.zip/* // @match *://redecanais.dad/* // @match *://redecanaistv.dad/* // @match *://redecanais.mov/* // @match *://redecanaistv.mov/* // @match *://redecanais.dev/* // @match *://redecanaistv.dev/* // @match *://redecanais.ps/* // @match *://redecanaistv.ps/* // @match *://redecanais.ms/* // @match *://redecanaistv.ms/* // @match *://redecanais.ac/* // @match *://redecanaistv.ac/* // @match *://xn--90afacv0ct3a1ct.xn--p1ai/* // @match *://xn--90afacaz8cml9ac9f.xn--p1ai/* // @match *://xn--90afacv0cu2a3cr.xn--p1ai/* // @match *://xn--90afacv0clj6ac0dxa.xn--p1ai/* // @icon https://redecanais.la/templates/echo/img/favicon.ico // @grant GM_registerMenuCommand // @grant GM_setValue // @grant GM_getValue // @license MIT // @run-at document-start // ==/UserScript== (function () { 'use strict'; function getElementByXpath(path, elem = undefined) { let e = elem; if (e == undefined) e = document return document.evaluate(path, e, null, XPathR###lt.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; } function getElementsByXpath(path, elem = undefined) { let e = elem; if (e == undefined) e = document var nodes = document.evaluate(path, e, null, XPathR###lt.UNORDERED_NODE_SNAPSHOT_TYPE, null); var r###lt = []; for (var i = 0; i < nodes.snapshotLength; i++) { r###lt.push(nodes.snapshotItem(i)); } return r###lt; } var Config = { UI_barra_comentarios: true, } var u = window.document.URL; function IniciarScript() { GM_registerMenuCommand("📚Abrir Mapa do Site📚", () => { window.open("https://redecanais.zip/mapa.html"); }); GM_registerMenuCommand("🎥Abrir Mapa dos filmes🎥", () => { window.open("https://redecanais.zip/mapafilmes.html"); }); const _bc = Config.UI_barra_comentarios ? "✔️" : "❌" GM_registerMenuCommand(_bc + "Barra de comentários", () => { if (Config.UI_barra_comentarios == true) { Save_Config("UI_barra_comentarios", false); window.location.reload(); } else { Save_Config("UI_barra_comentarios", true); window.location.reload(); } }); // CRIA INTERFACES let link = new URL(u) if (link.pathname == "/mapafilmes.html" || link.pathname == "/mapa.html") { // ADICIONA UM SISTEMA DE BUSCA MELHOR NO MAPA DE FILMES Build_UI_Search(link); } else { Build_UI_Main(); } } function Build_UI_Search(link) { let search = ""; if (link.search != "") { // APLICA PARAMETROS DE PESQUISA search = link.searchParams.get('search'); } document.getElementById("cool_find_div").remove(); // Deleta aquele botão de procurar que fica no inferior direito let mainspan = getElementByXpath("//span[@style='color: rgb(255, 255, 255);']/span"); let clonemainspan = mainspan.cloneNode(true); let maindiv = document.createElement("div"); maindiv.style = "margin: 20px;color:white;background-color:rgb(20,20,20)"; maindiv.id = "divprincipal"; maindiv.append(clonemainspan); document.body.append(maindiv); mainspan.remove(); let listadefilmes = DM.Construir_Array_Lista_FilmesSeries(); maindiv.childNodes[0].childNodes[1].childNodes[0].remove(); // ADICIONA UMA NOVA BARRA DE PESQUISA let barra = maindiv.childNodes[0].childNodes[1]; let div = document.createElement("div"); // Avisar ao usuario que o site foi modificado addlabel(div, "A pagina foi modificado pelo script, removendo o botão de pesquisar e adicionando um sistema de busca melhor. Os r###tado da pesquisa aparecerão abaixo. A pesquisa é com base na lista disponivel abaixo"); div.append(document.createElement("br")); addbutton(div, "Ver lista completa", "", () => { maindiv.childNodes[1].style.display = "block"; }, "150;30"); div.append(document.createElement("hr")); addlabel(div, "Nome do Filme : "); let _nomefilmeinput = addinput(div, search, "Digite o nome do filme", "text", "inputnome"); _nomefilmeinput.style.width = "100%"; _nomefilmeinput.placeholder = "Ex:. Vingadores, Bob Esponja, One piece..." _nomefilmeinput.oninput = () => { getR###lts(listadefilmes) }; div.append(document.createElement("hr")); addlabel(div, "Ano : "); div.append(document.createElement("br")); let anoinput = addinput(div, "", "Ano do filme\r\nDeixe vazio para ignorar", "text", "anoinput"); anoinput.placeholder = "Ex:. 2012"; anoinput.oninput = () => { getR###lts(listadefilmes) }; div.append(document.createElement("hr")); addlabel(div, "Tipo de pesquisa : "); div.append(document.createElement("br")); let typesearch = [ "Contém texto", "Pesquisa Linear", ] var dropdowntypesearch = document.createElement("select"); dropdowntypesearch.id = "typesearch"; dropdowntypesearch.style = "font-size:16px"; dropdowntypesearch.oninput = () => { getR###lts(listadefilmes) }; createOptions(dropdowntypesearch, typesearch); div.append(dropdowntypesearch); div.append(document.createElement("hr")); addlabel(div, "Resolução : "); div.append(document.createElement("br")); let _resnone = addinput(div, "Nenhum", "", "checkbox", "resnone"); _resnone.onclick = () => { document.getElementById("resnone").checked = true; document.getElementById("res1080p").checked = false; document.getElementById("res720p").checked = false; document.getElementById("res480p").checked = false; getR###lts(listadefilmes); }; addinput(div, "1080p", "", "checkbox", "res1080p").onclick = () => { document.getElementById("resnone").checked = false; document.getElementById("res1080p").checked = true; document.getElementById("res720p").checked = false; document.getElementById("res480p").checked = false; getR###lts(listadefilmes); }; addinput(div, "720p", "", "checkbox", "res720p").onclick = () => { document.getElementById("resnone").checked = false; document.getElementById("res1080p").checked = false; document.getElementById("res720p").checked = true; document.getElementById("res480p").checked = false; getR###lts(listadefilmes); }; addinput(div, "480p", "", "checkbox", "res480p").onclick = () => { document.getElementById("resnone").checked = false; document.getElementById("res1080p").checked = false; document.getElementById("res720p").checked = false; document.getElementById("res480p").checked = true; getR###lts(listadefilmes); }; _resnone.checked = true; div.append(document.createElement("hr")); addlabel(div, "Outros : "); div.append(document.createElement("br")); addinput(div, "Dublado", "", "checkbox", "dubinput").onclick = () => { getR###lts(listadefilmes) }; div.append(document.createElement("br")); addinput(div, "Legendado", "", "checkbox", "leginput").onclick = () => { getR###lts(listadefilmes) };; div.append(document.createElement("br")); addinput(div, "Nacional", "", "checkbox", "nacinput").onclick = () => { getR###lts(listadefilmes) };; div.append(document.createElement("hr")); addlabel(div, "R###ltado : "); div.append(document.createElement("br")); let r###ltados = document.createElement("div"); r###ltados.id = "r###lts"; r###ltados.style = "padding:20px;background-color: rgb(10, 10, 10); border: solid rgb(50, 50, 50);"; div.append(r###ltados); maindiv.append(div) maindiv.insertBefore(div, maindiv.childNodes[0]) maindiv.childNodes[1].style.display = "none"; if (link.search != "") { getR###lts(listadefilmes); } } function Build_UI_Main() { let inputgroup = getElementByXpath("//div[@class='input-group']"); if (inputgroup.parentNode.className != "search-channel") { // Cria botão de procurar site let sitesearchspan = document.createElement("span"); sitesearchspan.className = "input-group-btn"; let sitesearchspanbutton = document.createElement("span"); sitesearchspanbutton.innerHTML = "🔎📚"; sitesearchspanbutton.title = "Pesquisar no Mapa do Site"; sitesearchspanbutton.onclick = () => { let input = document.getElementById("pm-search").value; window.location.href = `https://redecanais.zip/mapa.html?search=${input}` } sitesearchspanbutton.className = "btn btn-default"; sitesearchspan.append(sitesearchspanbutton); let filmesearchspan = document.createElement("span"); filmesearchspan.className = "input-group-btn"; let filmesearchspanbutton = document.createElement("span"); filmesearchspanbutton.innerHTML = "🔎🎥"; filmesearchspanbutton.title = "Pesquisar no Mapa de Filmes"; filmesearchspanbutton.onclick = () => { let input = document.getElementById("pm-search").value; window.location.href = `https://redecanais.zip/mapafilmes.html?search=${input}` } filmesearchspanbutton.className = "btn btn-default"; filmesearchspan.append(filmesearchspanbutton); inputgroup.append(sitesearchspan); inputgroup.append(filmesearchspan); } let barra = document.getElementById("content-main"); let div = document.createElement("div"); div.id = "BARRA"; if (barra != null) { // ADICIONA BOTÕES let b2 = document.createElement("button"); b2.setAttribute("class", "btn btn-default"); b2.innerText = "📚Mapa do Site📚"; div.append(b2); b2.onclick = () => { window.open("/mapa.html"); }; let b3 = document.createElement("button"); b3.setAttribute("class", "btn btn-default"); b3.innerText = "🎥Mapa de Filmes🎥"; div.append(b3); b3.onclick = () => { window.open("/mapafilmes.html"); }; barra.append(div); barra.insertBefore(div, barra.childNodes[0]) if (document.getElementsByName("Player")[0] != null) { // Se houver um player de video, adicione esse botão let b = document.createElement("button"); b.setAttribute("class", "btn btn-default"); b.innerText = "💿Redirecionar ao Url do Filme💿"; div.append(b); b.onclick = () => { window.location.href = document.getElementsByName("Player")[0].src; }; CarregarListaDeEpisódios(); } } // Apaga aquela barra de comentarios if (Config.UI_barra_comentarios == false) { getElementByXpath("//div[contains(@class,'pm-video-watch-sidebar')]")?.remove(); } // Apaga aquela barra vermelha onde aparece todos contato do Rede Canais document.getElementsByClassName("alert alert-danger")[0]?.remove(); // Remove a barra vermelha do Rede Canais TV document.getElementsByClassName("alert")[0]?.remove(); // Remove Anuncio do rede Cansi TV const ad = document.getElementsByTagName("center"); if (ad.length != 0) { ad[ad.length - 1].remove(); } // Apaga anuncio para apps da Rede Canais getElementByXpath("//div/a[@href='./android/']").parentNode.remove() // Apaga aquele texto em baixo document.getElementsByClassName("col-xs-12 col-sm-12 col-md-10")[1]?.remove(); // Remove links abaixos document.getElementsByClassName("col-xs-4 col-sm-2 col-md-2")[0]?.remove(); } function CarregarListaDeEpisódios() { // INSERE O BOTÃO DE PULAR PRO PROXIMO EPISÓDIO /* Quando você estiver assistindo uma serie, nesta pagina não amazena nenhum link que leva ao proximo episodio, ou seja, o usuário teria que procurar sozinho o proximo episódio saindo da propria pagina e eu terei que usar fetch para solucionar isso - O que eu fiz: fiz um codigo que pega nome da serie a partir do nome disponivel que tem no site e cria um link, nesse link é onde fica a lista de episodios Ex : "https://redecanais.dad/loki-1a-temporada-episodio-01-proposito-glorioso_fb7c023db.html" >>> "https://redecanais.dad/browse-loki-videos-1-date.html" (Acredito eu que todas as series seguem esse formato de url) - Como nos temos a temporada atual e o eposodio atual, apenas pegaremos o proximo episodio e criarmos o botão, esté e o funcionamento dessa função */ if (DM.Get_Nome_Serie_Completo(2) != null && !DM.Get_Nome_Serie_Completo(2).toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").includes("episodio")) { return; } u = window.document.URL; let link, nomeepisodio; if (DM.Get_Nome_Serie_Completo(2) != null) link = DM.Construir_link(DM.Get_Apenas_Nome(DM.Get_Nome_Serie_Completo(2))); else if (DM.Get_Nome_Serie_Completo(1) != null) link = DM.Construir_link(DM.Get_Apenas_Nome(DM.Get_Nome_Serie_Completo(1))); else link = DM.Construir_link(DM.Get_Nome_Serie_Completo(0)); nomeepisodio = DM.Get_Eposide_Name(DM.Get_Nome_Serie_Completo(2)); console.log(link); obter_pagina_lista_episodios(link); function obter_pagina_lista_episodios(url, tentativa = 0) { fetch(url) .then(function (response) { // When the page is loaded convert it to text return response.text() }) .then(function (html) { // Initialize the DOM parser var parser = new DOMParser(); // Parse the text var doc = parser.parseFromString(html, "text/html"); // Obtem o elemento da lista de episodios e insere na pagina atual let episodiosdiv = doc.querySelector(".pm-category-description"); let div = document.getElementById("BARRA"); if (document.getElementById("episodiodiv") == null) { episodiosdiv.id = "episodiodiv"; episodiosdiv.style.display = "none"; episodiosdiv.children[0].children[0].remove(); episodiosdiv.children[0].children[0].remove(); div.append(episodiosdiv); div.insertBefore(episodiosdiv, div.childNodes[div.childNodes.length - 1]); } if (document.getElementById("btnlistaepisodios") == null) { let listepisodios = document.createElement("button"); listepisodios.setAttribute("class", "btn btn-default"); listepisodios.innerText = "🔢Lista de Episódios"; listepisodios.id = "btnlistaepisodios"; listepisodios.title = "Disponibiliza a lista de eposódios na pagina atual"; listepisodios.onclick = () => { if (episodiosdiv.style.display == "none") episodiosdiv.style.display = "block"; else episodiosdiv.style.display = "none"; }; div.append(listepisodios); div.insertBefore(listepisodios, div.childNodes[0]); } let ListaEpisódios = DM.Construir_Array_Episodios(nomeepisodio); let nextepisode = document.createElement("button"); nextepisode.setAttribute("class", "btn btn-default"); nextepisode.innerText = "▶️Proximo Episódio"; nextepisode.onclick = () => { let episodioindex = ListaEpisódios.findIndex((e) => e[0] == nomeepisodio) window.location.href = ListaEpisódios[episodioindex + 1][2]; }; div.append(nextepisode); div.insertBefore(nextepisode, div.childNodes[0]); console.log("Serie encontrada"); }) .catch(function (err) { console.log(url); if (tentativa == 0) { console.error('Serie não encontrada, tentando novamente', err); link = DM.Construir_link(DM.Get_Apenas_Nome(DM.Get_Nome_Serie_Completo(2)), 1); obter_pagina_lista_episodios(link, 1); } else if (tentativa == 1) { console.error('Serie não encontrada. tentando novamente(2)', err); link = DM.Construir_link(DM.Get_Apenas_Nome(DM.Get_Nome_Serie_Completo(2), true)); obter_pagina_lista_episodios(link, 2); } else if (tentativa == 2) { console.error('Serie não encontrada. tentando novamente(3)', err); link = DM.Construir_link(DM.Get_Apenas_Nome(DM.Get_Nome_Serie_Completo(2)), 3); obter_pagina_lista_episodios(link, 3); } else if (tentativa == 3) { console.error('Serie não encontrada. tentando novamente(4)', err); link = DM.Construir_link(DM.Get_Apenas_Nome(DM.Get_Nome_Serie_Completo(2)), 4); obter_pagina_lista_episodios(link, 4); } }); } } window.onload = () => { if (u.includes("contador.php?static=true") || u.startsWith("https://sinalpublico")) // IGNORAR A EXECUÇÃO DO SCRIPT NESSES URL return; Load_Config(); } window.document._DM = function () { return DM }; var DM = { // Funções para decifrar link e construir arrays Get_Num_Season(e) { let m = e.toLowerCase().match(/(\d+)a-temporada/); if (m != null) { let int = parseInt(m[1]); if (int == 0) int++; return int; } else return undefined }, Get_Num_Episode(e) { let a = e.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, ""); if (a.match(/episodio-(\d+)/) != null) a = a.match(/episodio-(\d+)/)[1]; else a = a.match(/episodio:-(\d+)/)[1]; return a; }, Get_Eposide_Name(name) { let array = name.split("-"); return array[array.length - 1].trim(); }, Get_Nome_Serie_Completo(e = 0) { // Obtem o nome da serie ou filme switch (e) { case 0: return window.document.URL; // Exemplo : https://redecanais.dad/loki-1a-temporada-episodio-01-proposito-glorioso_fb7c023db.html case 1: return pm_video_data.url; // Exemplo : '/loki-1a-temporada-episodio-01-proposito-glorioso_fb7c023db.html' case 2: return getElementByXpath("//h1[@itemprop='name']").innerText.toLowerCase(); // Exemplo : Loki - 1ª Temporada - Episódio 01 - Propósito Glorioso default: return "" } }, Get_Apenas_Nome(nome, semespaços = false) { if (nome.includes(" - ")) // converte em link cru nome = DM.Construir_Nome_Serie_Cru(nome); if (nome.includes("temporada")) nome = nome.match(/([^\/]+)-\d+a-temporada-/)[1]; else nome = nome.match(/([^]+)-episodio-/)[1]; nome = nome.replace(/-legendado/g, ""); if (semespaços == true) nome = nome.replaceAll("-", ""); return nome; }, Construir_Nome_Serie_Cru(nome) { // Exemplo : "Os Simpsons - 1ª Temporada - Episodio 01 - O prêmio de Natal" nome = nome.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, ""); // deixa minusculo e remove acéntos nome = nome.replace(/[\/\(\)\#\.\,]+/g, "") nome = nome.replaceAll("ª", "a"); nome = nome.split(" ").join("-") nome = nome.replaceAll("---", "-") return nome; // Deve retornar : 'os-simpsons-1a-temporada-episodio-01-o-prêmio-de-natal' }, Construir_link(nome, type = 0) { switch (type) { case 0: return new URL(window.document.URL).origin + "/browse-" + nome.replaceAll("&", "and") + "-videos-1-date.html"; case 1: return new URL(window.document.URL).origin + "/browse-" + nome.replaceAll("&", "e") + "-videos-1-date.html"; case 2: return new URL(window.document.URL).origin + "/browse-" + nome.replaceAll(" ", "") + "-videos-1-date.html"; case 3: return new URL(window.document.URL).origin + "/browse-" + nome.replaceAll("&", "to") + "-videos-1-date.html"; case 4: return new URL(window.document.URL).origin + "/browse-" + nome.replaceAll(" ", "to") + "-videos-1-date.html"; default: return "" } }, Construir_Array_Episodios(episodioatual) { // DECIFRAR OS ELEMENTOS DA LISTA DE ÉPISÓDIO let _array = []; try { let epdiv = document.getElementById("episodiodiv").children[0]; for (let i = 0; i < epdiv.childNodes.length; i++) { const element = epdiv.childNodes[i]; if (element.nodeName == "#text") { if (element.textContent == " / " || element.textContent == "" || element.textContent == " ") continue; let link, epnumber; let nomeep = element.textContent.split("-")[0].trim().toLocaleLowerCase(); // ENCONTRA O LINK DO PROXIMO EPISÓDIO link = element.nextElementSibling.href || element.nextElementSibling.children[0].href; // PINTA DE AMARELO O EPISÓDIO ATUAL if (nomeep == episodioatual) element.previousSibling.style.color = "yellow"; epnumber = element.previousSibling.textContent || element.previousSibling.innerHTML; epnumber = epnumber.split("-")[0].trim().toLocaleLowerCase() // FINALIZA _array.push([nomeep, epnumber, link]); } } console.log(_array); return _array; } catch (error) { alert(`função encontrou um erro ao decifrar elementos da lista de episódios, essa função ainda não é perfeita, veja o console`); console.error("Erro na função : ", error, _array); } }, Construir_Array_Lista_FilmesSeries() { let _array = []; // Essa lista é no formato array : [[NOME DO FILME, LINK], ...] let tempelem = []; // variavel temporaria let listelem = document.getElementById("divprincipal").childNodes[0].childNodes; for (let i = 11; i < listelem.length; i++) { const node = listelem[i]; if (node.nodeName.toLowerCase() == "#text") { // elemento de texto tempelem.push(node.textContent); } else if (node.nodeName.toLowerCase() == "a") { // elemento link let finaltext = ""; for (let v = 0; v < tempelem.length; v++) { const element = tempelem[v]; finaltext += element; } _array.push([finaltext.replaceAll("\n", ""), node]); tempelem = []; } else if (node.nodeName.toLowerCase() == "b") { // elemento negrito if (node.hasChildNodes()) { if (node.childNodes[0].nodeName.toLowerCase() == "a") { // se dentro houver link do filme dentro do elemento negrito let finaltext = ""; for (let v = 0; v < tempelem.length; v++) { const element = tempelem[v]; finaltext += element; } _array.push([finaltext.replaceAll("\n", ""), node.childNodes[0]]); tempelem = []; } else { // caso for outra coisa no negrito if (node.innerHTML == 'Números & Símbolos') // ignorar esse elemento continue; tempelem.push(node.innerHTML); } } else { tempelem.push(node.innerHTML); } } } console.log("Lista de filmes/series : ", _array); return _array; } } window.document.dm = DM; function Save_Config(name, value) { // SALVA O VALOR DE UMA VARIAVEL E MANTEM OS OUTROS if (name != undefined) { Config[name] = value; GM.setValue("Config", Config); return; } // SALVA TUDO GM.setValue("Config", Config); }; async function Load_Config() {// OBTEM OS VALORES DA CONFIGURAÇÃO let _config = await GM.getValue("Config"); if (_config != undefined) { for (var k in _config) { Config[k] = _config[k] } } console.log("Script Settings", _config); // COMEÇA A MODIFICAÇÃO DA PAGINA DO REDE CANAIS IniciarScript(); }; function getR###lts(_array, index = 0, clear = true) { // Obtem os r###ltado da procura let divr###lts = document.getElementById("r###lts"); if (clear == true) divr###lts.innerHTML = ""; const _originalinput = document.getElementById("inputnome").value; const _input = document.getElementById("inputnome").value.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, ""); // deixa minusculo e remove acentos; let anoinput = document.getElementById("anoinput"); var find = 0; for (index; index < _array.length; index++) { let filme = _array[index]; function _othersvalues() { if (anoinput != "") if (!filme[0].toLowerCase().includes(anoinput.value.toLowerCase())) return true; if (document.getElementById("dubinput").checked == true) if (!filme[0].toLowerCase().includes("dublado")) return true; if (document.getElementById("leginput").checked == true) if (!filme[0].toLowerCase().includes("legendado")) return true; if (document.getElementById("nacinput").checked == true) if (!filme[0].toLowerCase().includes("(nacional)")) return true; if (document.getElementById("res1080p").checked == true) if (!filme[0].toLowerCase().includes("1080p")) return true; if (document.getElementById("res720p").checked == true) if (!filme[0].toLowerCase().includes("720p")) return true; if (document.getElementById("res480p").checked == true) if (!filme[0].toLowerCase().includes("480p")) return true; return false; } if (document.getElementById("typesearch").selectedIndex == 0) { // PESQUISA USANDO "INCLUDES" if (!filme[0].toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").includes(_input)) { continue; } if (_othersvalues()) continue; } else { // PESQUISA LINEAR if (_input.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "") !== filme[0].toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").slice(0, _input.length)) { continue; } if (_othersvalues()) continue; } let _label = addlabel(divr###lts, filme[0], 0); if (document.getElementById("typesearch").selectedIndex == 0) { const regEx = new RegExp(_originalinput, "ig"); _label.innerHTML = _label.innerHTML.replaceAll(regEx, "<span style='color:yellow'>" + _originalinput + "</span>"); } else { let strarray = (_label.innerHTML.substring(0, _originalinput.length) + "|" + _label.innerHTML.substring(_originalinput.length)).split("|"); _label.innerHTML = "<span style='color:yellow'>" + strarray[0] + "</span>" + strarray[1]; } divr###lts.append(filme[1].cloneNode(true)) // URL divr###lts.append(document.createElement("br")); find++; if (find > 20) // Esse é o comprimento da lista, caso chege ao limite, aparecera o botão de "Mostrar mais" { addbutton(divr###lts, "Mostrar Mais", "Mostra mais filmes", (e) => { e.target.remove(); getR###lts(_array, index + 1, false); }, "150;30"); break; } } } function addlabel(elem, text, type = 0) { const _elementotipo = type == 0 ? "span" : "p" const l = document.createElement(_elementotipo); l.innerHTML = text; elem.append(l) return l; } function addinput(elem, text = "", title = "", type = "text", id = "") { const _input = document.createElement("input"); _input.type = type; _input.innerHTML = text; _input.value = text; _input.title = title; _input.style = "font-size:16px"; _input.setAttribute("id", id); elem.append(_input); if (type == "checkbox") { addlabel(elem, text, 0); } return _input; } function addbutton(elem, text, title, func, width = "100;30") { const b = document.createElement("button"); b.innerHTML = text b.title = title; b.onclick = func; let w = width.split(";")[0]; let h = width.split(";")[1]; b.style = ` display: flex; justify-content: center; align-items: center; position: relative; width: ${w}px; height: ${h}px; margin: 5px; border: 10px solid var(--base-color); font-size: 16px; cursor: pointer;`; elem.append(b); } function createOptions(selectelem, list) { // CRIA OPÇÕES list.forEach((a, i) => { let _op = document.createElement("option"); _op.value = i; if (a.textContent != undefined) _op.innerHTML = a.textContent; else _op.innerHTML = a; selectelem.append(_op); }); } function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1); } var debug = false; // TESTES NO MEU SCRIPT DEIXE "false" PARA NÃO USAR ESSA FUNÇÃO. ISSO FAZ COM QUE O REDE CANAIS NÃO BLOQUEIE A PÁGINA INTEIRA if (debug == true) { const window = unsafeWindow; GM_registerMenuCommand("(DEBUG) Abrir Console", () => { // ABRIR CONSOLE window.prompt(`Rede Canais automaticamente fecha a página quando usúarios tentam usar o console, para resolver isso : Com essa caixa de alerta aberta, Aperte F12 para abrir o console, clique em "Network" e bloqueie a solicitação "cdn.jsdelivr.net/npm/[email protected]/dist/console-ban.min.js" - Clique Ctrl+F8 para desativar o loop do debugger infinito caso estiver sendo executado - Já existe um script no greasyfork que desbloqueia o clique com o botão direito se você quiser usar`); }); // DESATIVA FUNÇÃO DE FECHAR A PAGINA E DESATIVA O HISTÓRICO DE VOLTAR void (window.ConsoleBan = undefined); void (window.closeWindow = undefined); void (window.close = undefined); void (history.go = undefined); void (history.back = undefined); void (history.forward = undefined); void (window.history.go = undefined); void (window.history.back = undefined); void (window.history.forward = undefined); void (window.open = undefined); // EVITAR SAIR DA PAGINA /* function internalHandler(e) { e.preventDefault(); // required in some browsers e.returnValue = ""; // required in some browsers return "Custom message to show to the user"; // only works in old browsers } if (window.addEventListener) { window.addEventListener('beforeunload', internalHandler, true); } else if (window.attachEvent) { window.attachEvent('onbeforeunload', internalHandler); } window.onbeforeunload = internalHandler; window.close = function () { alert("rede canais forçou a fechar a pagina"); }*/ } })();