El País - CLEANED PAGE & Sin Límite de noticias 😁

Limpieza visual de ELPAIS.COM quitando publi y un montón de módulos molestos que no aportan mucho a la lectura. Además nos saltamos el Muro de nº de noticias y el Muro de Login.

  1. // ==UserScript==
  2. // @name El País - CLEANED PAGE & Sin Límite de noticias 😁
  3. // @namespace http://zequi.es
  4. // @version 0.69
  5. // @description Limpieza visual de ELPAIS.COM quitando publi y un montón de módulos molestos que no aportan mucho a la lectura. Además nos saltamos el Muro de nº de noticias y el Muro de Login.
  6. // @author @zequi
  7. // @match https://elpais.*/*
  8. // @include https://elpais.com/*
  9. // @include https://www.elmundo.es/*
  10. // @require https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js
  11. // @grant none
  12. // @run-at document-start
  13. // @license MIT
  14. // ==/UserScript==
  15.  
  16.  
  17.  
  18. // Mensaje importante:
  19. // Código ÑAPA: el código es bastante ñapa y hecho a toda leche, para uso personal. Pero si quieres echar una mano. Contacta conmigo! ;)
  20. // - ñapa: se usa Jquery, pero se puede quitar perfectamente.
  21. // - ñapa: la mayoría del código es para editar estilos, pero se hace a lo bruto, hay que cambiar el enfoque.
  22. // - ñapa: se ejecuta el script varias veces para asegurar en vez de poner un listener.
  23. // Código LEGACY: se ha ido añadiendo nuevo código, pero no hemos mantenido el código viejo (hay muchas líneas que seguro que ya no son necesarias).
  24. //
  25. // Lo dicho, si quieres ayudar a mejorar el código o añadir funcionalidad, contacta sin problema.
  26.  
  27. (function() {
  28. "use strict";
  29.  
  30. // Capar la ejecución de ciertos JS externos (ej: saltar el Muro de Login)
  31. // Ejecutamos lo antes posible estas líneas antes de ready, para evitar la ejecución de algunos Scripts de Javascript,
  32. // Quizás algunos de estos JS ya se capán por el browser por algún plugin, pero no viene mal caparlos también aquí para acelerar la carga de página y la privacidad.
  33. // Usamos una librería de github, q hemos copiado directamente en nuestro código justo abajo
  34. checkForBadJavascripts ( [
  35. [true, /arcsubscriptions.elpais.com/i, function(){console.log("zeq.script 001");} ],
  36. [true, /privacy-center.org/i, null ],
  37. [true, /adobedtm.com/i, null ],
  38. [true, /outbrain.com/i, null ],
  39. [true, /fundingchoicesmessages.google.com/, null ],
  40. [true, /pxlctl.elpais.com/, null ],
  41. [true, /s.go-mpulse.net/, null ],
  42. [true, /ENP-outbrain.js/i, null ],
  43. [true, /publicapi/i, function(){console.log("zeq.script 003");} ],
  44. [true, /news\.google\.com/i, function(){console.log("zeq.script 004");} ],
  45. [true, /closed-article-layer.js/i, function(){console.log("zeq.script 005");} ]
  46. ] );
  47. // Inyección de Librería checkForBadJavascripts()
  48. // copiada literalmente de: https://gist.github.com/tbrugz/2dd8b53bb6f125c64be9
  49. // sólo se ha copiado una función, hay algo más de código no copiado.
  50. // y pasada por un minifier (quizás se podría poner sin minimizar para facilitar auditorías de seguridad del código)
  51. function checkForBadJavascripts(e){return e.length?(checkForBadJavascripts=function(t){for(var r=e.length-1;r>=0;--r){var a=e[r][0],n=e[r][1];if(a){if(n.test(t.target.src))return c(r),!1}else if(n.test(t.target.textContent))return c(r),!1}function c(a){t.stopPropagation(),t.preventDefault();var n=e[r][2];"function"==typeof n&&n(t.target),t.target.parentNode.removeChild(t.target),e.splice(r,1),e.length||window.removeEventListener("beforescriptexecute",checkForBadJavascripts,!0)}},window.addEventListener("beforescriptexecute",checkForBadJavascripts,!0),checkForBadJavascripts):null}
  52.  
  53. // UTILS - función para que el Elemento html, se ponga de color gris por defecto, y con mouseover se ponga en color gris oscuro.
  54. function elementHoverize(selector, color_non_hovered = "lightgrey", color_hovered = "darkgrey") {
  55. $(selector).css("color", color_non_hovered)
  56. $(selector).hover(function(){$(this).css("color",color_hovered);}, function(){$(this).css("color",color_non_hovered);})
  57. }
  58.  
  59.  
  60. $(document).ready(function() {
  61.  
  62. // Hay una pequeño código para limpiar la basura de periódico de ElMundo, pero no está mantenida esta función.
  63. function cleanElmundo() {
  64. // CABECERA
  65. $(".ue-c-seo-links-container").remove();
  66.  
  67. // PORTADA
  68. $(".ue-c-newsletter-widget").remove(); // modulo de newsletter
  69. //$(".ue-c-cover-content__byline-list").remove(); // nombre del periodista en cada noticia
  70. $(".ue-c-cover-content__byline-name").remove();
  71. $(".servicios_vwo").remove(); //módulos de servicios
  72. $(".ue-c-cover-content__icon-premium").parent().parent().css("background-color", "#edab3b").css("opacity", "0.4"); //marca visualmente las noticias de pago
  73.  
  74. // PageNOTICIA > post-CUERPO
  75. $(".ue-c-article__trust").remove(); // seccion TrustProject
  76.  
  77. // PaginaNoticia > LATERAL derecho ENTERO!
  78. $(".ue-l-article__secondary-column").remove(); // fuera columna derecha entera
  79.  
  80. // PaginaNoticia > LATERAL derecho ENTERO!
  81. $(".ue-c-article__share-tools").remove(); //botones de compartir
  82. }
  83.  
  84.  
  85.  
  86.  
  87.  
  88. function cleanElpais() {
  89.  
  90. // ANTI-WALL > resetea el número de noticias gratis
  91. if (window.location.href!="https://elpais.com/") { //no se ejecuta en portada
  92. localStorage.removeItem('ArcP');
  93. }
  94. /*antiguo reseter
  95. var aa = JSON.parse(localStorage.getItem('ArcP'));
  96. aa.anonymous.rc["8"].c = -99;
  97. localStorage.setItem('ArcP', JSON.stringify(aa));
  98. */
  99.  
  100. // CABECERA
  101. $(".editions").remove(); //links a otras ediciones/idiomas: inglés/catalán/...
  102. $(".subscribe").remove(); //botón Subscribirse al lado del botón login
  103. $(".horizontal_scroll_wrapper").remove(); //links a otras secciones
  104. $(".alertBar").remove(); //quita el breaking-news (algo supuestamente urgente)
  105. $(".ad-giga-1").remove(); //quita la publi de arriba del todo (v2021oct)
  106. // Espacios en blanco en la cabecera
  107. //$(".x").css("padding", "8px"); //quitarle a la cabecera espacios en blanco por encima y debajo de logo elpais
  108. //$(".x-nf").css("padding-top","3px").css("padding-bottom","0px");
  109. $("#ctn_head").css("padding","0px");
  110. //$("#csw").css("margin-top","-4px")
  111. $(".x-nf .x_w").css("padding-top","0.2rem").css("padding-bottom","0.2rem"); //quitarle a la cabecera espacios en blanco por encima y debajo
  112. if (window.location.href=="https://elpais.com/") { //solo portada
  113. $(".x_bh").css("margin-top","0px"); $(".ep_l").css("margin-top","0px"); //quitarle a la cabecera espacios en blanco por encima de logo elpais
  114. $("h1.ep_l a img.ep_sl").remove() //bajo logo, quita img "periódico global"
  115. $("h1.ep_l a").css("height","2.75rem") // logo, quitar espacio debajo
  116. // experimentos o viejo
  117. //$("h1.ep_l").css("margin-top", "-6px").css("margin-bottom", "-6px") //tunning posicion logo, ligeramente hacia arriba,
  118. //$("h1.ep_l a img.ep_i").css("margin-top", "-1rem")
  119. //$("h1.ep_l a img.ep_i").css("height","75%").css("width","75%")
  120. //$(".x-nf.x-p .ep_e").css("background-image",'url("https://static.elpais.com/dist/resources/images/logos/primary/el-pais.svg")')
  121. }
  122. $(".al._g-o").remove(); // se quita el Breaking News de alertas, porque no suelen ser realmente urgentes. Y siempre está en portada.
  123. // en la subcabecera de todo el portal, donde están los topics:
  124. // quitar tanta altura
  125. $("._g._g-xs.cs").css("padding-top","0.4rem");
  126. $(".sm._df a").css("padding", "0.4rem 0.4rem");
  127. $(".x-ph").css("min-height", "0px");
  128. // fondo transparente de los topics
  129. $("._g-o.csw").css('background', 'rgba(255, 255, 255, 0)');
  130. $("#containerCounterLayer").css("background-color", "white")
  131.  
  132.  
  133.  
  134.  
  135. //***** PORTAL-ENTERO > CABECERA *****//
  136. // Subcabecera Topics
  137. $(".z-he").css("background", "none") // SubCabecera topics = fondo gris
  138. elementHoverize(".sm._df > a", "grey", "black"); // SubCabecera > Topics: cambiar color de texto a gris, y negro en hover.
  139. $("main").css("margin-top", "-1.6em") // SubCabecera topics = minimiza espacio debajo.
  140.  
  141.  
  142.  
  143. //***** PORTADA *****//
  144. // código pensado en portada, pero se ejecuta en todo el portal, se podría reorganizar el código
  145. $("ul.menu").remove(); //en cada sección, quitar el submenú de la izquierda.
  146. $(".author").remove(); $(".separator").remove(); $(".capitalize").remove(); //quita el nombre del periodista y ciudad
  147. $(".c_a").css("color", "#d9d9d9"); //
  148. $(".c_t").css("margin-bottom","6px") //encima de la firma, quita un poco de espacio entre titular y firma.
  149. $(".c_k.c_k-s").remove(); // portada > mod_noticia ==> borrar el texto de "contenido exclusivo"
  150.  
  151. // quitar módulos de publi y auto-promoción
  152. $(".classifieds_widget").remove(); //modulo de publicidad
  153. $("classifieds_widget").remove(); //modulo de servicios
  154. $("#el-pais-que-hacemos").remove() //quita la sección entera de auto-promoción del propio elpais
  155. $(".c-bra").css("color", "#ddd") // articulos pagados por publicidad, los ponemos en gris claro
  156. $(".b-eci_txt").remove(); //eliminar gran módulo único en portada autopromocional
  157. $(".ad-giga").remove(); //eliminar módulo de publi giga
  158. $(".b-bra-brandedmix").remove()
  159. // esquinas redondeadas del conteneder principal (portada y pf_noticia)
  160. $("main").css("border-radius","8px"); $("article").css("border-radius","8px")
  161. // fix: arreglar un problema visual del Logotipo repetido, solo en portada principal.
  162. $(".ep_e").css("background-image", "");
  163.  
  164.  
  165.  
  166.  
  167. //***** PORTADA > CONTENEDORES *****//
  168. // explicación de selectores de portada
  169. // "main section._g-o" = contenedor entero (no aplica a contenedores de final de página)
  170. // "main header._pr" = contenedor > titulo superior
  171.  
  172. // CONTENEDORES > espacio entre ellos (aplica a * containers)
  173. $("main section._g-o").css("margin-top", "1rem") // altura entre contenedores
  174. // CONTENEDORES > espacio entre ellos (aplica adhoc en los dos primeros containers)
  175. $("main section._g-o:eq(0)").css("margin-top", "-1.0rem") // contenedor 1º = subir un poco (reescribe!!)
  176. $("main section._g-o:eq(1)").css("top", "-2.5rem").css("background-color", "pink") //¿¿¿¿¿¿¿¿¿¿¿¿???????????????
  177. $("._g-o.z_hr").remove() // adhoc! borrar un espacio entre contenedor 1º y 2º (muy adhoc, facil q se rompa)
  178. // CONTENEDORES > color fondo blanco, redondeado
  179. $("main section._g-o").css("background-color", "white")
  180. $("main section._g-o").css("border-radius","15px"); $("article").css("border-radius","15px");
  181. // CONTENEDORES > TITULO > espacios
  182. $("main section._g-o > header").css("padding-top", "0.6rem").css("margin-bottom", '0.6rem') //quita aire encima/debajo del titulo del container
  183. //$("main header._pr").css("border-bottom", '0px') // portada > contenedor > TITULO borde inferior = eliminado --> DESACTIVADO
  184. // CONTENEDORES > borrar líneas horizontales
  185. $("main header._pr").css("border-top", '0px') // portada > contenedor > borde superior gordo negro = eliminado
  186. $("main .b-t_w").css("border-bottom", '0px') // portada > contenedor > borde inferior doble fino = eliminado (no es completo, no arregla * los contenedores con borde-inferior)
  187. // CONTENEDOR 1º (cambio ADHOC, cuidado)
  188. $("main section._g-o:eq(0)").css("padding-top", "1rem") // contenedor 1º > arriba = meter un poco de aire
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195. // PageNOTICIA > pre-CUERPO (HEADER-noticia:título/entradilla/foto)
  196. if (window.location.href!="https://elpais.com/") { //no se ejecuta en portada
  197. // para limpiar agresivamente la cabecera en la PáginaNoticia, NO en la portada.
  198. $("#u_c_dv").remove(); //quitar botón de registro
  199. $(".x_e._dn").remove(); //quitar botón de idioma
  200. // Cabecera blanca
  201. $(".x_ep._df > span, .x_ep._df > div").css("margin-top", 0) //quitar espacio vacío encima del logo
  202. $("#ctn_head").css("padding", "0px"); //quitar espacio vacío encima/debajo del logo
  203. // Subcabecera con tópicos
  204. $(".cs").css("padding-top", "0.6rem"); // SubCabecera de Topics = espacio en gris encima de subheader.topics
  205. $("article._g").css("margin-top", "0.001rem"); // SubCabecera de Topics = espacio en gris debajo de subheader.topics
  206. $(".cs_t_e").css("font-weight","600") // SubCabecera > categoría principal (arriba izq) = letra más delgada
  207. $(".cs_t_e").css("font-size","1.7rem") // SubCabecera > categoría principal (arriba izq) = letra más pequeña
  208. //$(".cs_t_e").after().css("height","0.15rem") // SubCabecera > categoría principal (arriba izq) > subrayado = más fino
  209. $(".cs_t_e").css("margin-bottom", "-0.7rem") // SubCabecera > categoría principal (arriba izq) = quita espacio de abajo
  210. $(".z-he").css("background", "none") // SubCabecera > fondo gris
  211.  
  212. //pre-foto
  213. $("article > Header.a_e").css("padding-top", "0.5rem"); //
  214. $("article > Header > div.a_e_txt").css("color", "#ddd"); // Pre-Titular
  215. //eliminar módulo de Lotería del lateral de la noticia
  216. //$("aside._pr>div").remove();.
  217. }
  218.  
  219. // PageNOTICIA > CUERPO
  220. if (window.location.href!="https://elpais.com/") { //no se ejecuta en portada
  221. $(".a_q").css("color", "#d9d9d9");
  222. $("section#cta_id").remove(); //elimina el módulo de Subscripción insertado en medio del texto de la noticia
  223.  
  224. // post-foto: descripción foto
  225. //$(".sb").remove(); //compartir
  226. //$(".f_c span.f_a").remove(); //en las imágenes, en el pie de foto se quita nombre del fotógrafo o agencia
  227. $(".w_rs").remove(); //eliminar botones compartir
  228. //$(".a_e_txt").css("padding-bottom", "1.5rem"); //eliminar botones compartir
  229. $(".a_e").css("border-bottom", "0px"); //eliminar la línea horizontal encima del autor
  230. //$("article>header figure>figcaption>span").hide()
  231. $("figure>figcaption.a_m_p").css("border-bottom-width","0px") // quitar linea debajo descripcion foto en ciertas pf_noticias
  232. $("figure>figcaption.a_m_p>span.a_m_m").hide() //en las imágenes, en el pie de foto se quita nombre del fotógrafo o agencia
  233. elementHoverize("figcaption.a_m_p")
  234.  
  235.  
  236.  
  237. // post-foto: Bloque Autor
  238. $("article > Header").css("margin-bottom", "8px"); // BloqueAutor > reducir espacio vacío por arriba.
  239. $("article > div.a_md").css("margin-top","-2.6rem") // BloqueAutor > reducir espacio vacío por encima.
  240. $("article > div.a_md").css("margin-bottom", "0.5rem"); // BloqueAutor > reducir espacio vacío por debajo.
  241. $("article .a_md_a").css("margin-bottom","-0.3rem") // BloqueAutor > quita espacio entre líneas de autor y fecha
  242. $("article .a_md_txt").css("margin-top","0.5rem").css("margin-left","-1.7rem") // BloqueAutor > texto => posicionarlo mejor
  243. elementHoverize("article .a_md_txt") // BloqueAutor > texto => en gris clarito
  244. $("article .a_md_txt > .a_md_f").css("border-bottom-width", "0px"); // BloqueAutor > quitar la línea inferior
  245.  
  246. }
  247.  
  248.  
  249. // PageNOTICIA > post-CUERPO
  250. $("#ctn_closed_article").remove(); //si la noticia concreta está protegida por el 'Muro de Login', se elimina el módulo para logarse.
  251. $(".a_tp").remove(); // seccion TrustProject
  252. $(".a_com_l").remove(); // en seccion comentarios, eliminar link a "normas"
  253. $("#ctn_freemium_article").remove(); // caja de "Contenido exclusivo para suscriptores"
  254.  
  255.  
  256. // PaginaNoticia > LATERAL derecho
  257. $(".w_b .w_tx").remove(); // en la página de noticia, en lateral > se borra el texto de la newsletter, aunque dejamos el botón
  258.  
  259. // publi disfrazada de noticia: borrar
  260. $("aside._pr>aside.c-brr").remove()
  261.  
  262. // módulo newsletter: gris clarito
  263. $(".w-cta").css("color", "#ddd");
  264. $(".w-cta > h3").css("color", "#ddd")
  265. $(".w-cta > h3").css("border-bottom", "0px")
  266.  
  267. // módulo Lo más visto
  268. elementHoverize("section.w-lmv")
  269. $(".w-lmv").css("border-bottom-width","0px") //quitar línea inferior del módulo
  270. $(".w_t").css("color","lightgrey")
  271.  
  272.  
  273. // PIE de PAGINA
  274. $(".fo").css("display", "none") //no se remove() este elemento, xq produce problemas (se pierde la hamburguesa y la barra de avance de lectura)
  275. $("#footer-lazy").css("display","none"); // oculta el footer entero, pero evitamos usar remove() xq rompe la hamburguesa.
  276. $("#classified_el-pais").css("display", "none")
  277.  
  278. // BORDE y FONDO
  279. //if (window.location.href!="https://elpais.com/") { //no se ejecuta en portada
  280. $(".fusion-app").css({background: 'radial-gradient(#d7dbe0 40%, grey)'}); //cambio visual para mejor Lectura = para que los bordes de la página sean gris, para mejor lectura
  281. //}
  282. document.body.style.background = '#d7dbe0'; //cambio visual para mejor Lectura = poner la barra desplazadora lateral derecha más oscura
  283. document.body.style.scrollbarFaceColor = '#747575';
  284.  
  285.  
  286. //LEGACY - from original code
  287. // pendiente revisar si sigue siendo necesario
  288. $(".fc-dialog-container").fadeOut();
  289. $(".fc-dialog-overlay").fadeOut();
  290. $(".fc-whitelist-root").remove();
  291. $(".fc-ab-root").remove();
  292. $(".salida_articulo").css("overflow", "visible");
  293.  
  294. //LEGACY - codigo extra personalizado por mi
  295. // pendiente revisar si sigue siendo necesario
  296. $(".articulo-trust").remove();
  297. $(".a_tp").remove(); // seccion TrustProject
  298. $(".a_d").remove(); // seccion Subscríbete
  299. $(".articulo-extras").remove();
  300. $(".articulo_branded").remove();
  301. $(".pie").remove();
  302. $(".navegacion-sucripcion").remove();
  303. $(".bloque-patrocinador").remove();
  304. $(".bloque_tematico_rsc_2019").remove();
  305. $(".contenedor_clasificados").remove();
  306. $(".antetitulo_comercial_generico").parent().remove();
  307. //v0.7
  308. $(".articulo_opinion > .articulo__interior > .noticia-cerrada").parent().parent().remove()
  309. $(".articulo_opinion > .articulo__interior > .noticia-cerrada-cintillo").parent().parent().remove()
  310. //v0.8
  311. $(".contenedor_servicios_new").remove();
  312. //0.9
  313. $('a[rel="sponsored"]').remove();
  314. //0.10
  315. $('#bloque_tematico_deportes').remove();
  316. //0.11
  317. $('.bloque_tematico_especial-publi').remove();
  318. }
  319.  
  320.  
  321.  
  322.  
  323. function cleanElpaisDelayed() {
  324. //este código se ejecuta unos cuantos segundos después de renderizarse la página
  325. //módulo amarillo Límite de Lectura
  326. $("#articlesLeftMsg > span").text("tropocientos");
  327. $(".sc_b").remove(); // borrado el botón para más información de promociones de subscripción elpais
  328. if ( $("#ctn_head .ed span:first").text() == "España" ) {
  329. $("#ctn_head .ed span:first").text("Espanistán!");
  330. } ;
  331. }
  332.  
  333.  
  334. setTimeout(cleanElmundo, 200); setTimeout(cleanElpais, 10);
  335. setTimeout(cleanElmundo, 500); setTimeout(cleanElpais, 500);
  336. setTimeout(cleanElmundo, 1400); setTimeout(cleanElpais, 1400);
  337. setTimeout(cleanElpaisDelayed, 4000);
  338. });
  339. })();