Filtrar carteles con palabras en Desmo

Ocultar carteles que tengan ciertas palabras en Desmo

// ==UserScript==
// @name         Filtrar carteles con palabras en Desmo
// @version      0.11.8
// @description  Ocultar carteles que tengan ciertas palabras en Desmo
// @author       ArtEze
// @match        *://desmotivaciones.es/*
// @grant        none
// @namespace    http://tampermonkey.net/
// ==/UserScript==

var g = {};
window.g = g;

g.tener_css_todos = function(nodo,css){
    return Array.from(nodo.querySelectorAll(css));
};
g.concatenar_arrays = function(a,b){
    return a.concat(b);
};
g.filtrar_por_atributo = function(nodo,atributo,regex){
    return nodo.filter(function(x){
        return x.attributes[atributo] && regex.test(x.attributes[atributo].value);
    });
};

/* Comienzo de análisis de imágenes */

g.obtener_pixeles = function(canvas,contexto){
    var datos_imagen = {};
    datos_imagen = contexto.getImageData(
        0,0,canvas.width,canvas.height
    );
    var bytes = datos_imagen.data;
    return bytes;
};
g.obtener_bytes = function(cartel,imagen){
    // console.log("obtener_bytes",cartel,imagen);
    var canvas = document.createElement("canvas");
    imagen.setAttribute("crossOrigin","");
    canvas.width = imagen.width;
    canvas.height = imagen.height;
    var contexto = canvas.getContext("2d");
    contexto.drawImage(imagen,0,0);
    var datos = g.obtener_pixeles(canvas,contexto);
    //document.body.appendChild(canvas);
    /*
    if(cartel.nodos.canvas==undefined){
        cartel.nodos.canvas = [];
        cartel.nodos.canvas.push(canvas);
    }
    * */
    canvas.remove();
    return datos;
};
g.tiene_colores = function(cartel,imagen){
    var devuelve = [];
    g.puede_analizar = false;
    // console.log("tiene_colores",cartel,imagen);
    var d = [];
    try{
        g.puede_analizar = false;
        d = g.obtener_bytes(cartel,imagen);
        var total_factor_gris = 0;
        var cantidad_factores = 0;
        for(var i=0;i<d.length/Math.pow(7,2);++i){
            var j = Math.floor(Math.random()*d.length/4)*4;
            if(
                d[j+0]!=0&&d[j+0]!=255&&
                d[j+1]!=0&&d[j+1]!=255&&
                d[j+2]!=0&&d[j+2]!=255
            ){
                var factor_gris_1 = Math.abs(d[j]-d[j+1]);
                var factor_gris_2 = Math.abs(d[j]-d[j+2]);
                var factor_gris_3 = Math.abs(d[j+1]-d[j+2]);
                var factor_gris = factor_gris_1+factor_gris_2+factor_gris_3;
                total_factor_gris += factor_gris;
                ++cantidad_factores;
            }
        }
        devuelve = [
            total_factor_gris,
            total_factor_gris/cantidad_factores,
            cantidad_factores
        ];
        g.puede_analizar = true;
    }catch(e){
        devuelve = [0,NaN,0];
    }
    g.puede_analizar = true;
    return devuelve;
};

/* Fin de análisis de imágenes */

g.tamaño_original = function(){
    g.carteles = Array.from(document.querySelectorAll(".demot-small"));
    g.carteles.map(function(x){
        x.attributes.class.value=".cartel";
        x.querySelector("a").setAttribute("target","_blank");
        x.querySelector(".img-small").attributes.class.value=".imagen";
    });
};
g.obtener_carteles = function(){
    var demotes = g.tener_css_todos(document,".demot");
    var carteles = g.filtrar_por_atributo(demotes,"id",/d\d+/);
    var es_usuario = false;
    if(carteles.length==0){
        carteles = g.tener_css_todos(document,".small");
        es_usuario = true;
    }
    return [es_usuario,carteles];
};

g.carteles = g.obtener_carteles();
g.es_usuario = g.carteles[0];

// console.log("carteles",g.carteles);

g.json_carteles = g.carteles[1].map(
    !g.es_usuario?function(x){
        // console.log("no es usuario");
        var enlace = x.querySelector("a");
        var imagen = x.querySelector("img");
        var título_nodo = x.querySelector(".demot-title");
        var etiquetas_nodo = x.querySelector(".wrap");
        var etiquetas_nodos = g.tener_css_todos(etiquetas_nodo,"a");
        var nombre_nodo = x.querySelector(".color0,.color1,.color2,.color3,.color4");
        var título_enlace = enlace.href.split("/").slice(-1)[0];
        var devuelve = {
            nodos: {
                cartel: x,
                título: título_nodo,
                etiquetas_nodo: etiquetas_nodo,
                etiquetas_nodos: etiquetas_nodos,
                nombre_nodo: nombre_nodo,
                imagen: imagen
            },
            textos: {
                alternativo: "",
                nombre: nombre_nodo.textContent,
                título: título_nodo.childNodes[0].textContent,
                título_enlace: título_enlace,
                detalles: "",
                analizado: false,
                etiquetas: etiquetas_nodos.map(function(x){return x.textContent;})
            }
        };
        // console.log("imagen",imagen);
        if(imagen){
            //devuelve.textos.tiene_colores = g.tiene_colores(devuelve,imagen);
        }
        return devuelve;
    }:function(x){
        // console.log("es usuario");
        var enlace = x.querySelector("a");
        var imagen = x.querySelector("img");
        var nombre_nodo = document.querySelector(".color0,.color1,.color2,.color3,.color4");
        var título_enlace = enlace.href.split("/").slice(-1)[0];
        var longitud_guión = " - ".length;
        var longitud_enlace = título_enlace.length;
        var índice_descripción = imagen && imagen.alt.indexOf(" - ");
        var índice_mayor = longitud_enlace>índice_descripción?longitud_enlace:índice_descripción;

        var devuelve = {
            nodos: {
                cartel: x,
                enlace: enlace,
                nombre_nodo: nombre_nodo,
                imagen: imagen
            },
            textos: {
                nombre: nombre_nodo.textContent,
                título_enlace: título_enlace,
                índice_descripción: índice_descripción,
                índice_mayor: índice_mayor,
                alternativo: imagen && imagen.alt,
                título: imagen && imagen.alt.slice(0,índice_mayor),
                detalles: imagen && imagen.alt.slice(índice_mayor+longitud_guión),
                analizado: false,
                etiquetas: []
            }
        };
        // console.log("imagen",imagen);
        if(imagen){
            //devuelve.textos.tiene_colores = g.tiene_colores(devuelve,imagen);
        }
        return devuelve;
    }
);

g.procesar_lista = function(x){
    return x.split(/[\x20\x0a]+/g).filter(function(x){return x;});
};

g.ocultar_carteles = function(){
    g.carteles_filtrados = g.json_carteles.filter(function(x){
        var textos = [
            x.textos.título,
            x.textos.detalles,
            x.textos.nombre
        ].concat(x.textos.etiquetas);
        var objeto_booleano = {
            booleano: false
        };
        g.prueba_regex = function(regex,objeto_booleano,textos){
            if(!objeto_booleano.booleano){
                for(var i=0;i<textos.length;++i){
                    var z = textos[i];
                    var coincide = regex.test(z);
                    if(coincide){
                        console.log(regex,z);
                        objeto_booleano.booleano = true;
                        i = textos.length;
                    }
                }
            }
            return objeto_booleano;
        };
        g.lista_filtros.contiene.map(function(y){
            var w = y.replace(/-/g," ");
            var regex = new RegExp(w,"i");
            g.prueba_regex(regex,objeto_booleano,textos);
        });
        g.lista_filtros.completas.map(function(y){
            var w = y.replace(/-/g," ");
            var regex = new RegExp("\\b"+w+"\\b","i");
            g.prueba_regex(regex,objeto_booleano,textos);
        });
        if( x.textos.título && (x.textos.título.toUpperCase()==x.textos.título) ){
            objeto_booleano.booleano = true;
        }
        // console.log("objeto_booleano",objeto_booleano)
        return objeto_booleano.booleano;
    });
    g.carteles_filtrados.map(function(x){
        x.nodos.cartel.remove();
        // x.nodos.cartel.style.display = "none";
    });
    var facebook_banner = document.querySelector("#fb-root");
    var facebook_2 = document.querySelector("#likebox");
    console.log("facebook_banner",facebook_banner);
    console.log("facebook_banner 2",facebook_2);
    var eliminar_banner_facebook = facebook_banner && facebook_banner.remove();
    var eliminar_facebook_2 = facebook_2 && facebook_2.remove();
    Array.from(document.querySelectorAll(".demot>div br")).map(function(x){x.remove();});
};

g.esperar_análisis = [];
g.analizados = 0;

g.intervalo_NaN = setInterval(function(){
    var i = 0;
    g.json_carteles.map(function(x){
        if(x.textos.analizado==false){
                if(!g.esperar_análisis.includes(i)){
                    g.esperar_análisis.push(i);
                }
        }else{
            if(x.nodos.cartel){
                x.nodos.cartel.style["background-color"] = "#000000e0";
            }
        }
        ++i;
    });
},50);

setTimeout(function(){
    g.intervalo_análisis = setInterval(function(){
        if(g.puede_analizar==undefined){
            g.puede_analizar = true;
        }
        if(g.puede_analizar){
            if(g.esperar_análisis.length>0){
                g.puede_analizar = false;
                var índice_aleatorio = Math.floor(Math.random()*g.esperar_análisis.length);
                var y = g.esperar_análisis[índice_aleatorio];
                var x = g.json_carteles[y];
                var color100 = (100+Math.random()*100)%100;
                x.nodos.cartel.style["background-color"]="#4020ffe0";
                var tiene = g.tiene_colores(x,x.nodos.imagen);
                if(!isNaN(tiene[1])){
                    if(tiene[1]<27){
                        console.log("borrado",tiene,x.textos.título/*,x.nodos.canvas*/);
                        x.nodos.cartel.remove();
                        //document.querySelector("#tag-cloud").appendChild(x.nodos.canvas.slice(-1)[0]);
                    }else{
                        console.log("permanece",tiene,x.textos.título/*,x.nodos.canvas*/);
                    }
                    x.textos.analizado = true;
                    ++g.analizados;
                    g.esperar_análisis = (
                        g.esperar_análisis.slice(0,índice_aleatorio).concat(
                            g.esperar_análisis.slice(índice_aleatorio+1)
                        )
                    );
                }else{
                    x.nodos.cartel.style["background-color"]="#ff"+color100+"20e0";
                }
                x.textos.tiene_colores = tiene.join(" ");
                g.puede_analizar = true;
            }else{
                if(g.analizados>=g.json_carteles.length){
                    clearInterval(g.intervalo_NaN);
                }
                clearInterval(g.intervalo_análisis);
                console.log("Análisis completado");
            }
        }else{
            console.log("Cartel ocupado");
        }
    },900);
},6000);

document.body.addEventListener("keyup", function(event){
    if (event.key.toLowerCase()=="s"){
        event.preventDefault();
        document.querySelector("a[rel='next']").click();
    }
});

g.agregar_botones_páginas = function(){
    var páginas = document.querySelector(".page-links");
    if(páginas){
        páginas.style.height = (30*9) + "px";
        var página_actual = +location.href.split("/").slice(-1)[0];
        var lista_números = [
                       1,2,3,5
            ,        10,20,30,50
            ,      100,200,300,500
            ,    1000,2000,3000,5000
            ,  10000,20000,30000,50000
            ,100000,200000,300000,500000
        ].map(function(x){
			for(var i=0;i<2;++i){
				var y = i==0?x:-x;
				var sm = página_actual + y;
				if(sm>0){
					var a = document.createElement("a");
					a.innerHTML = (i==0?"+":"-") + x + " "+ sm;
					a.href = "/cola/" + sm;
					a.className = "page page3 page-inactive";
					páginas.appendChild(a);
				}
			}
        })
    }
}

g.agregar_botones_opciones = function(){
	var div = document.createElement("div");
	div.style.position = "fixed";
	div.style.top = "100px";
	div.style.left = "10px";
	var subdiv = document.createElement("div");
	var botón = document.createElement("button");
	var b = document.createElement("b");
	var botones = [
		["block","desplazador","0","x",[
			["click",function(x){
				var elementos = Array.from(document.querySelectorAll(".menú"));
				var muestra = elementos[0].style.display == "block";
				if(muestra){
					elementos.map(function(x){
						x.style.display = "none";
						return x;
					})
				}else{
					elementos.map(function(x){
						x.style.display = "block";
						return x;
					})
				}
				return x;
			}],
			["mouseenter",function(x){
				document.querySelector(".desplazador").style.opacity = "1";
				var elementos = Array.from(document.querySelectorAll(".menú"));
				elementos.map(function(x){
					x.style.opacity = "1";
					return x;
				})
				return x;
			}],
			["mouseleave",function(x){
				document.querySelector(".desplazador").style.opacity = "0";
				var elementos = Array.from(document.querySelectorAll(".menú"));
				elementos.map(function(x){
					x.style.opacity = "0";
					return x;
				})
				return x;
			}]
		]],
		["none","menú","1","Hola",[
			["click",function(x){
				console.log(x)
			}]
		]]
	].map(function(x){
		var subdiv = document.createElement("div");
		var botón = document.createElement("button");
		var b = document.createElement("b");
		subdiv.style.display = x[0];
		subdiv.classList.add(x[1]);
		subdiv.style.opacity = x[2];
		b.innerHTML = x[3];
		botón.style["color"] = "#ffffffe0";
		botón.style["background-color"] = "#007f00e0";
		x[4].map(function(x){
			subdiv.addEventListener(x[0],x[1])
		})
		botón.appendChild(b);
		subdiv.appendChild(botón);
		div.appendChild(subdiv);
	});
	document.querySelector("body").appendChild(div)
}

g.lista_filtros = {
    contiene: g.procesar_lista(`
nuevo-año año-nuevo
anonuevo nuevoano navidad nabida
dinero guapo
whisky troll stupid
porn coj sex nalg webo fetich mamad vagin fuck scroto
abortat perv
genocid
bolud pelotud idiota
testícul testicul
suscrib
confía confia
mierd
joto laucha patada
weon weón weona
puta
pho
pokemon monster covid smith smok shin furro
messi fred tenn auron
emerit
facebook poke
novia hija gata
novio hijo gato
caga cumea trolea tortura
cago cumeo troleo torturo
nazi
`), completas: g.procesar_lista(`
coca-cola paco-y-yo feliz-vanidad pana-miguel punto-g me-corrí
mario-bros
cocacola
amo amor desamor
ligar machista
cordura
dinero dinerito
moco mocos mocoso
nochebuena
cumpleanos cumpleaños
distanciado distanciamiento punzada pandemia coronavirus
matar funar
autismo
loli hentai onichan
uwu nya nyu unu
simp
maricon maricón
chupalo forro
culiao tonto
mamon mamón
wtf
watafac watafak watefac watefak guatafac guatafak
watafoc watafok watefoc watefok guatafoc guatafok
wotafac wotafak wotefac wotefak guotafac guotafak
wotafoc wotafok wotefoc wotefok guotafoc guotafok
wtefak wtefok
follar folle follé follador
beso besos besar besando
celo celos
abrazo abrazos
rey reina reino
teta tetas tetón tetona
cum polla verga pene dildo
caca culo orto ass
pedo pedofilo pedófilo
cachondo
ano chingas
grasoso
gay gays gey geys gei geis
pajas capaja tangas pajero pijas joto ostias china chinos pete
paja capajas tanga pajeros pija jotos ostia chinas chino petes
puta putas pucha puchas
puto putos pucho puchos
tonta tontas parida paridas chinga marica mariconas chota coña coñas
tonto tontos parido paridos chingo marico maricones choto coño coños
asco asquea asqueao
chori choripan choripán
alcohol licor
ingles inglés lovelive starwars
night moon
fire sun
rich under cake park guitar hi cringe fock chocolat how what kinder
music death glad light but white foot
among universe bimbo naruto vegetto fortnite zelda dragonball
sonic puercoespin
spidiman blastoise volvasor
disney mickey mike clarence
jake freddie brad luigi anne soros ben dalas cabrera harry vladimir lil
cerati dross goku
isabella perry
fernan fernanfloo
messi mesi
sovietico soviético militares
carajo carajos
pipí puber
cristo jesus jesús jesucristo dios vaticano
resurreccion resurrección
amen amén
bad god good
satan satán
larreta willyrex yoshi rubius
lacra
20\\d{2}
    `)
};

g.ocultar_carteles();
g.tamaño_original();
g.agregar_botones_páginas();
g.agregar_botones_opciones();