Compare commits

..

No commits in common. "main" and "burguillos-dental-anuncio" have entirely different histories.

466 changed files with 2338 additions and 429605 deletions

3
.gitmodules vendored
View File

@ -1,3 +0,0 @@
[submodule "conversejs"]
path = conversejs
url = https://github.com/conversejs/converse.js/

View File

@ -27,8 +27,6 @@ my $build = Module::Build->new(
'Module::Pluggable' => 0, 'Module::Pluggable' => 0,
'List::AllUtils' => 0, 'List::AllUtils' => 0,
'Lingua::Stem::Snowball' => 0, 'Lingua::Stem::Snowball' => 0,
'Moo' => 0,
'UUID::URandom' => 0,
}, },
); );
$build->create_build_script; $build->create_build_script;

View File

@ -9,6 +9,5 @@
"search_index": "burguillos_info", "search_index": "burguillos_info",
"geoip_database": "/usr/share/GeoLite2-City_20230804/GeoLite2-City.mmdb", "geoip_database": "/usr/share/GeoLite2-City_20230804/GeoLite2-City.mmdb",
"onion_base_url": "http://example.onion"; "onion_base_url": "http://example.onion";
"listen": "https:localhost:3555", "listen": "https:localhost:3555"
"debug": true
} }

View File

@ -0,0 +1,17 @@
<post>
<author>Sergio Iglesias (Lead Developer)</author>
<date>2022-11-08T22:38+00:00</date>
<title>Primer post.</title>
<ogdesc>El primer artículo de Burguillos.info.</ogdesc>
<category>index</category>
<slug>primer-post</slug>
<content>
<p>Bienvenidos a Burguillos.info, tu portal a todas las novedades de lo que sucede en Burguillos.</p>
<p>Burguillos.info es un proyecto hecho como hobby en menos de 2 días para prácticar mis habilidades de frontend.</p>
<p>La intención es que sea una web estática colaborativa, para escribir artículos puedes hacerlo desde <a href="https://git.owlcode.tech/sergiotarxz/burguillos.info">git</a>, tan solo se requiere conocimiento de html.</p>
<p>Todos los artículos pasarán por un proceso de revisión.</p>
<p>No tengo mucha idea de frontend, así que el diseño ha quedado como he podido, he usado <a href="https://randoma11y.com">randoma11y</a> para generar los colores con contraste alto por accesibilidad.</p>
</content>
</post>

View File

@ -1,8 +1,8 @@
<post> <post>
<author>Burguillos.info</author> <author>Burguillos.info</author>
<date>2022-11-09T22:38+00:00</date> <date>2022-11-09T22:38+00:00</date>
<title>Horarios autobuses Burguillos - Sevilla.</title> <title>Horarios autobuses Burguillos - Sevilla 2023.</title>
<last_modification_date>2024-05-28T03:40+00:00</last_modification_date> <last_modification_date>2023-05-03T03:40+00:00</last_modification_date>
<ogdesc>Los horarios de autobuses de Burguillos.</ogdesc> <ogdesc>Los horarios de autobuses de Burguillos.</ogdesc>
<category>autobuses</category> <category>autobuses</category>
<slug>horarios-autobuses</slug> <slug>horarios-autobuses</slug>

View File

@ -0,0 +1,17 @@
<post>
<author>Burguillos.info</author>
<date>2022-11-10T22:31+00:00</date>
<title>Migrantes Bienvenidos.</title>
<ogdesc>Migrantes Bienvenidos.</ogdesc>
<category>index</category>
<slug>migrantes-bienvenidos</slug>
<img src="/img/refugees-welcome.webp"/>
<content>
<p>Debido a la llegada continuada de personas que provienen de otros países, provincias y localidades, desde Burguillos.info hemos considerado oportuno dedicarle un post a todos aquel que no es natal de Burguillos pero que ya es un burguillero más.</p>
<p>La gente de Burguillos aprecia enormemente la riqueza cultural producto de la mezcla de culturas que se produce en el pueblo.</p>
<p>Queremos que todo aquel que no haya nacido en Burguillos pueda encontrar en este, nuestro pueblo un segundo hogar, por ello consideramos importante revindicar que las personas migrantes tengan acceso a todos sus derechos durante su estancia en Burguillos.</p>
<p>¿Vienes de fuera? En Burguillos.info nos gustaría hacernos eco de tu historia. Contacta con <a href="mailto:contact@owlcode.tech">contact@owlcode.tech</a> para contarnos tu experiencia.</p>
</content>
</post>

View File

@ -0,0 +1,56 @@
<post>
<author>Sergio Iglesias (Lead Developer)</author>
<date>2022-11-11T01:56+00:00</date>
<title>Como suscribirse por RSS.</title>
<ogdesc>Como suscribirse por RSS.</ogdesc>
<category>index</category>
<slug>suscribirse-rss</slug>
<content>
<div class="suscribirse-rss">
<p>Actualmente no implementamos suscripciones por email aunque dicho soporte está planeado, mientras tanto el único método de suscripción disponible es RSS.</p>
<p>La gran ventaja del método es que no tienes porque dar tu email y te puedes desuscribir cuando quieras, en este artículo te contamos como.</p>
<p>En primer lugar os hablaré de RSS, RSS es un protocolo a través del cual en lugar de avisar nosotros a alguna de tus cuentas de que hemos publicado una noticia es tu propio teléfono o computador el que le pregunta a la página si hay noticias nuevas, de ese modo no tienes que renunciar a tus datos para saber que se cuece en una web, muchas webs de noticias implementan soporte de este protocolo.</p>
<p>En primer lugar vamos a instalar Feeder, un cliente de RSS de software libre para Android.</p>
<img src="/img/rss/1.webp" alt="Captura de pantalla de la aplicación Feeder en el Play Store."/>
<p>Ahora visitarémos bajarémos abajo del todo de cualquier página de Burguillos.info y veremos un botón morado con un punto y dos curvas que nos indicará que nos suscribamos.</p>
<img src="/img/rss/2.webp" alt="Captura de pantalla del botón de suscribirse."/>
<p>Procederemos a dejar presionado sobre el botón hasta que nos aparezca este menú.</p>
<img src="/img/rss/3.webp" alt="Menú en el que seleccionar copiar enlace"/>
<p>Es muy importante que verifiquemos que la url termina en all.xml, si no nos habremos equivocado de botón, el otro idéntico es para suscribirse solo a una categoría, lo cual es útil si por ejemplo solo quieres enterarte de las noticias relacionadas con el autobús.</p>
<p>Una vez verificado, procederemos a pulsar sobre copiar enlace y abriremos Feeder, la aplicación que acabamos de descargar.</p>
<p>Una vez abierta pulsaremos en la esquina superior derecha sobre los tres puntos y veremos esta pantalla:</p>
<img src="/img/rss/4.webp" alt="Feeder con el menú abierto."/>
<p>Pulsaremos sobre "Add Feed" y nos saldrá esto:</p>
<img src="/img/rss/5.webp" alt="Feeder con un cuadro de dialogo para añadir feed abierto."/>
<p>Dejamos presionado hasta que nos aparezca la opción de pegar el texto que copiamos antes y lo pegamos.</p>
<img src="/img/rss/6.webp" alt="Feeder con un cuadro de dialogo para añadir feed abierto con el siguiente contenido 'https://burguillos.info/all.rss'."/>
<p>Hecho esto pulsamos sobre buscar y si lo hemos hecho todo bien veremos lo siguiente:</p>
<img src="/img/rss/7.webp" alt="Feeder con un cuadro de dialogo para añadir feed abierto con el siguiente contenido 'https://burguillos.info/all.rss' y abajo un dialogo mostrando los datos de Feed de Burguillos.info."/>
<p>Pulsamos sobre el elemento que ha aparecido debajo del cuadro de busqueda y pasaremos a otra pantalla donde deberemos desplazarnos abajo del todo.</p>
<img src="/img/rss/8.webp" alt="Un dialogo donde se muestran preferencias para el Feed"/>
<p>Cuando pulsemos "Ok" habremos conseguido suscribirnos a Burguillos.info.</p>
<img src="/img/rss/9.webp" alt="Las noticias de Burguillos.info ahora aparecen listadas en la aplicación."/>
<p>RSS es más divertido cuando te suscribes a todos los sitios web que te interesen que provean RSS, de ese modo puedes ser el primero en enterarte de todo lo que esté pasando, y de forma totalmente anónima.</p>
</div>
</content>
</post>

View File

@ -0,0 +1,78 @@
<post>
<author>Burguillos.info</author>
<date>2022-11-11T23:09+00:00</date>
<title>Carta y Menú de la Tienda de Noemi en Burguillos.</title>
<last_modification_date>2023-07-28T20:42+00:00</last_modification_date>
<img src="/img/noemi.webp"/>
<ogdesc>Carta y Menú de la Tienda de Noemi en Burguillos.</ogdesc>
<category>donde-comer</category>
<slug>tienda-noemi</slug>
<attributes>
<attribute>reparto-a-domicilio-comida</attribute>
<attribute>hamburguesas</attribute>
</attributes>
<content>
<h2>Hamburguesas, Pollofres, Gofres, Buñuelos, Montaditos, Salchipapas, entra y descubrelo.</h2>
<h3><span style="background: black; color: red;">NOVEDAD</span> ¡¡Envio a domicilio disponible!!</h3>
<img alt="Front door of the shop Tienda Noemi" style="border: solid 1px black;" src="/img/noemi.webp"/>
<p>Hoy os traemos un negocio de nueva apertura, "La Tienda de Noemi" localizado en Calle Albahaca Local 2 ACC, ideal para comer en Burguillos.</p>
<p>Este negocio abre de 17:00 a 22:00 de Lunes a Jueves y de 17:00 a 00:00 de Viernes a Domingo.</p>
<p>Además de vender multitud de bebidas y snacks, esta tienda ofrece bocadillos y otros productos preparados como buñuelos, además puedes dejar tu pedido encargado por teléfono en <a href="tel:+34698901484">698901484</a>, tienes la opción de que te lo envien a casa o recogerlo allí.</p>
<p>A continuación listamos el menú completo de comidas para haceros la boca agua.</p>
<h3>Hamburguesas</h3>
<ol class="productos">
<li>Hamburguesa Simple. (Carne y queso.) <b>2€</b></li>
<li>Hamburguesa Completa. (Carne, cebolla, lechuga, tomate y queso.) <b>2.50€</b></li>
<li>Hamburguesa Super. (Carne, huevo, bacon, queso, cebolla y york.) <b>3.50€</b></li>
<li>Hamburguesa Yopi. (Filete pollo, queso, tomate, cebolla y lechuga.) <b>2.50€</b></li>
</ol>
<h3>Bocadillos</h3>
<ol class="productos" start="5">
<li>Bocadillo de pollo con queso. <b>2.50€</b></li>
<li>Bocadillo de pollo con cebolla, queso y tomate. <b>2.50€</b></li>
<li>Bocadillo de superpollo con queso, bacon, cochinito, tomate, cebolla y lechuga. <b>3€</b></li>
<li>Bocadillo de filete de lomo con queso. <b>2.50€</b></li>
<li>Bocadillo de filete de lomo con queso, tomate, cebolla y lechuga. <b>3€</b></li>
<li>Bocadillo de superlomo con queso, bacon, cochinito, tomate, cebolla y lechuga. <b>3€</b></li>
<li>Bocadillo de cochinito con queso. <b>2€</b></li>
<li>Bocadillo de cochinito con queso, bacon, cebolla, tomate y lechuga. <b>3€</b></li>
<li>Bocadillo de lomo adobado con queso. <b>2€</b></li>
<li>Bocadillo de lomo adobado con queso, bacon, cebolla, tomate y lechuga. <b>3€</b></li>
<li>Bocadillo de bacon y queso. <b>1.50€</b></li>
<li>Bocadillo vegetal con pollo. <b>3.50€</b></li>
<li>Serranito. (Pollo o lomo, tortilla francesa, pimiento, tomate y queso.) <b>4€</b></li>
<li>Super serranito. (Pollo o lomo, tortilla francesa, pimiento, cochinito, bacon, patatas, tomate y queso.) <b>6€</b></li>
<li>Perrito caliente simple. <b>2€</b></li>
<li>Sandwich de jamon york y queso. <b>1.50€</b></li>
<li>Sandwich vegetal. <b>2€</b></li>
<li>Montadito de pollo o lomo. <b>2€</b></li>
</ol>
<h3>Otros</h3>
<ol class="productos" start="23">
<li>Nuggets con patatas. (8 unidades.) <b>3.50€</b></li>
<li>Croquetas con patatas. (8 unidades.) <b>3.50€</b></li>
<li>Salchipapa pequeña. <b>2€</b></li>
<li>Salchipapa grande. <b>3.50€</b></li>
<li>Patatas pequeñas. <b>2€</b></li>
<li>Patatas grandes. <b>3.50€</b></li>
<li>Crepes. <b>3.50€</b></li>
<li>Tortitas. <b>3.50€</b></li>
<li>Gofres con chocolate. <b>3.50€</b></li>
<li>Buñuelos. <b>3.50€</b></li>
<li>Pollofres. <b>4€</b></li>
</ol>
<p>¿Quieres ver tu negocio localizado en Burguillos en este espacio? Contacta con <a href="mailto:contact@owlcode.tech">contact@owlcode.tech</a>.</p>
</content>
</post>

View File

@ -0,0 +1,18 @@
<post>
<author>Burguillos.info</author>
<date>2022-11-12T22:40+00:00</date>
<title>Cartel de Cuentacuentos Infantil "Don Juan Tenorio".</title>
<ogdesc>Cartel de Cuentacuentos Infantil "Don Juan Tenorio".</ogdesc>
<category>index</category>
<img src="/img/mairami-preview.webp"/>
<slug>cuentacuentos-infantil-don-juan-tenorio</slug>
<content>
<p>Hoy os traemos información de una representación teatral que se ha producido este mismo día en Alcalá del Rio.</p>
<p>La obra ha sido representada por la Asociación de Teatro Mairami cuyos origenes están fuertemente ligados a Burguillos y los habitantes de Burguillos profesamos infinito cariño por los que conforman esta asociación por su inestimable contribución a la propagación de la cultura.</p>
<p>Adjuntamos algunas imágenes relevantes, el cartel de la obra y una fotografía de otra representación que muestra a una parte de los actores de Mairami.</p>
<img alt="Cartel de la obra." src="/img/mairami-1.webp"/>
<img alt="Elenco de actores." src="/img/mairami-2.webp"/>
</content>
</post>

View File

@ -0,0 +1,23 @@
<post>
<author>Burguillos.info</author>
<date>2022-11-14T00:02+00:00</date>
<title>Información fresca del Cuentacuentos de Mairami del 2022/11/12.</title>
<ogdesc>Información fresca del Cuentacuentos de Mairami del 2022/11/12.</ogdesc>
<category>index</category>
<img src="/img/mairami-preview.webp"/>
<slug>cuentacuentos-infantil-don-juan-tenorio-imagenes</slug>
<content>
<p>En la tarde de ayer 12 de noviembre, la Compañía de teatro MAIRAMI, realizó un Cuentacuentos basado en la obra de José Zorrilla "Don Juan Tenorio", una versión que combina verso y prosa, con semejanzas actuales para que el público infantil pueda entender los entresijos de esta obra maestra.</p>
<p>En Burguillos.info hemos conseguido imagenes e incluso un vídeo del Cuentacuentos del día 12 de Noviembre y estamos deseando compartirlos con vosotros.</p>
<p>Ademas traemos las cuentas de Instagram y Facebook de Mairami para que podais seguir todas sus novedades <a href="https://www.instagram.com/teatro_mairami/">@teatro_mairami</a> y <a href="https://es-es.facebook.com/ACMairami/">A.C. Mairami</a>
<p>Sin más demora ahí van las imagenes y el vídeo completo.</p>
<img alt="La compañia mairami interpreta un cuentacuentos de Don Juan Tenorio" src="/img/mairami-cuentacuentos/1.webp"/>
<img alt="La compañia mairami interpreta un cuentacuentos de Don Juan Tenorio" src="/img/mairami-cuentacuentos/2.webp"/>
<img alt="La compañia mairami interpreta un cuentacuentos de Don Juan Tenorio" src="/img/mairami-cuentacuentos/3.webp"/>
<img alt="La compañia mairami interpreta un cuentacuentos de Don Juan Tenorio" src="/img/mairami-cuentacuentos/4.webp"/>
<img alt="La compañia mairami interpreta un cuentacuentos de Don Juan Tenorio" src="/img/mairami-cuentacuentos/5.webp"/>
<video src="/vid/cuentacuentos-don-juan-tenorio-mairami.mp4" controls/>
</content>
</post>

View File

@ -0,0 +1,30 @@
<post>
<author>Burguillos.info</author>
<date>2022-11-14T14:43+00:00</date>
<title>Venta de calendarios de la Plataforma N.A.L.A.</title>
<ogdesc>Venta de calendarios de la Plataforma N.A.L.A.</ogdesc>
<category>animales-y-mascotas</category>
<img src="/img/plataforma-nala-preview.webp"/>
<slug>venta-de-calendarios-plataforma-nala</slug>
<content>
<img alt="Logo plataforma NALA" src="/img/plataforma-nala.webp"/>
<p>Plataforma N.A.L.A. es una entidad que se dedica a buscar un hogar a mascotas abandonadas en las cercanias de Burguillos.</p>
<p>Debido al deplorable estado en el que suelen encontrarse a los animales y a la necesidad de esterilizarlos antes de darlos en adopción para evitar la proliferación de más animales abandonados, N.A.LA acumula durante el año deudas veterinarias que sufraga con la emisión de un calendario solidario.</p>
<p>Estos calendarios vienen con todos los festivos nacionales y comunitarios marcados y se ofrecen en dos formatos A3 (Para colgar en la pared.) y A5 (Para tener en una mesa.)</p>
<p>El calendario contiene fotografías de los Naleros más fotogénicos, indicaciones de cambio de hora y espacio para escribir notas.</p>
<p>Los precios son 5€ para el formato A5 y 10€ para el formato A3.</p>
<p>¿Quieres uno de esos calendarios?</p>
<p>Obtenerlo es bien sencillo, envía un mail <a href="mailto:tienda@plataformanala.org">tienda@plataformanala.org</a> y reserva el calendario que deseés antes del día 20 de Noviembre.</p>
<p>El calendario se envía a todas partes de España, por lo que lo puedes pedir desde fuera de Burguillos.</p>
<p>Si quereis saber más de Plataforma N.A.L.A. no dudeis en buscarles en Facebook <a href="https://www.facebook.com/plataformanalapage/">@plataformanala</a> o Instagram <a href="https://www.instagram.com/plataformanala/">@plataformanala</a></p>
</content>
</post>

View File

@ -0,0 +1,27 @@
<post>
<author>Burguillos.info</author>
<date>2022-11-16T12:28+00:00</date>
<title>Fin de semana de cultura.</title>
<ogdesc>Fin de semana de cultura.</ogdesc>
<category>index</category>
<img src="/img/portada-certamen-teatro-preview.webp"/>
<slug>fin-de-semana-de-cultura</slug>
<content>
<img alt="Cartel de las obras." src="/img/portada-certamen-teatro.webp"/>
<p>Hoy nos hacemos eco de una noticia que hemos encontrado en la página web del ayuntamiento, el XII Certamen de Teatro de Burguillos.</p>
<p>Vamos a proceder a fusilar el artículo para que lo podáis leer aquí y dejaremos el enlace para que podaís visitar el original:</p>
<p>No hagas planes para este fin de semana y vive con nosotros el <a href="https://www.facebook.com/hashtag/certamen">#Certamen</a> de <a href="https://www.facebook.com/hashtag/teatro">#Teatro</a> "Villa de <a href="https://www.facebook.com/hashtag/burguillos">#Burguillos</a>" Os mostramos las obras seleccionadas y los horarios de representación:</p>
<ul>
<li>Viernes 18 a las 20:00 horas. Comedia "<a href="https://www.facebook.com/hashtag/farsantes">#Farsantes</a>" de la compañía Acarrabal Teatro de Sevilla. Un grupo de maravillosos farsantes que vienen con la intención de hacernos disfrutar con sus fantásticas y extrañas historias.</li>
<li>Sábado 19 a las 20:00 horas. Comedia con pinceladas de musical "<a href="https://www.facebook.com/hashtag/blanco">#Blanco</a>" de la compañía Azoteatro de Sevilla. Tu amigo del alma te reemplaza por el Arte Contemporáneo. Los dos testigos de tu boda acaban a puñetazos ...</li>
<li>Domingo 20 a las 19:00 horas. Comedia "<a href="https://www.facebook.com/hashtag/reiniciando">#Reiniciando</a>" de la compañía Qué jArte Teatro de Madrid. Una obra que habla de la vida, y como telón de fondo un confinamiento que se hizo eterno y en el que vivimos situaciones jamás pensadas...</li>
<p>La presentación de la Gala y la entrega de premios del domingo correrá a cargo de la compañía de teatro <a href="https://www.facebook.com/hashtag/mairami">#Mairami.</a></p>
<p>Las entradas pueden recogerse en el Área de Cultura del Ayuntamiento desde hoy hasta el viernes en horario de 9:00 a 14:00 y en la puerta de la Carpa el mismo día de cada función.
¡¡Os esperamos en la Carpa Municipal!!
<a href="https://www.facebook.com/hashtag/burguillosescultura">#BurguillosEsCultura</a> <a href="https://www.facebook.com/hashtag/certamenteatroburguillos">#CertamenTeatroBurguillos</a></p>
<p>El enlace al original es el siguiente: <a href="https://burguillos.es/es/actualidad/noticias/FIN-DE-SEMANA-CULTURA-EN-BURGUILLOS/">https://burguillos.es/es/actualidad/noticias/FIN-DE-SEMANA-CULTURA-EN-BURGUILLOS/</a> por vuestra privacidad os recomendamos no pulsar sobre los hashtag y si lo haceis hacerlo desde burguillos.info y no burguillos.es ya que hemos quitado las partes de la url destinadas al seguimiento de los usuarios.</p>
</content>
</post>

View File

@ -0,0 +1,15 @@
<post>
<author>Burguillos.info</author>
<date>2022-11-19T18:03+00:00</date>
<title>¡Silencio, se piensa!.</title>
<ogdesc>¡Silencio, se piensa!.</ogdesc>
<category>index</category>
<slug>silencio-se-piensa</slug>
<img src="/img/silencio-se-piensa-preview.webp"/>
<content>
<img alt="Portada silencio, se piensa" src="/img/silencio-se-piensa-1.webp">
<p>Hemos recibido información adicional de la obra de teatro del día 2022/11/19, desde Burguillos.info procedemos a comunicaros las novedades:</p>
<p>🎭 Continuamos con el Certamen de teatro “Villa de Burguillos “ con la 2da compañía finalista , Producciones el dramaturgo de Jerez de la Frontera ( Cádiz) y que estrenan en primicia su obra : ¡Silencio, se piensa ! Escrita por José Mateos , director de la compañía. Los jóvenes actores Luis Guerrero y Emilio Rosales son los en cargados de envolvernos en esta magnífica historia que narra el futuro incierto de dos actores que acaban de quedarse sin trabajo... obra que recurre al auto sacramental como género clásico poco usado hoy día por los dramaturgos contemporáneos . Estilo que ejercen de forma magistral induciendo sutilmente al bonito ejercicio de pensar con profundidad y espíritu autocrítico. ¿¿Te vas a perder esta oportunidad?? Te esperamos a las 20 :00 H en el teatro municipal. 🎭</p>
</content>
</post>

View File

@ -27,109 +27,400 @@
<a href="tel:+34621210460">621 210 460</a>.</p> <a href="tel:+34621210460">621 210 460</a>.</p>
<p>A continuación procedemos a dejar la carta para que podáis <p>A continuación procedemos a dejar la carta para que podáis
realizar el pedido que deseeis:</p> realizar el pedido que deseeis:</p>
<details> <h2>Entrantes</h2>
<summary><h2>Entrantes</h2></summary> <table>
<ul> <tr>
<li>Ensaladilla -- Tapa: <b>2.50€</b> 1/2 Ración: <b>5.00€</b> Ración: <b>10.00€</b></li> <th></th>
<li>Aliño de Pimientos -- Tapa: <b>2.50€</b> 1/2 Ración: <b>5.00€</b> Ración: <b>10.00€</b></li> <th>Tapa</th>
<li>Aliño de Pulpo -- Tapa: <b>2.50€</b> 1/2 Ración: <b>5.00€</b> Ración: <b>10.00€</b></li> <th>1/2 Ración</th>
<li>Aliño de Huevas -- Tapa: <b>2.50€</b> 1/2 Ración: <b>5.00€</b> Ración: <b>10.00€</b></li> <th>Ración</th>
<li>Huevas con Mayonesa -- Tapa: <b>2.50€</b> 1/2 Ración: <b>5.00€</b> Ración: <b>10.00€</b></li> </tr>
<li>Ensalada Mixta -- Ración: <b>4.00€</b></li> <tr>
<li>Ensalada Normal -- Ración: <b>3.00€</b></li> <td>Ensaladilla</td>
</ul> <td>2.50€</td>
</details> <td>5.00€</td>
<details> <td>10.00€</td>
<summary><h2>Aperitivos</h2></summary> </tr>
<ul> <tr>
<li>Papas Bravas -- Tapa: <b>3.00€</b> 1/2 Ración: <b>6.00€</b> Ración: <b>12.00€</b></li> <td>Aliño de Pimientos</td>
<li>Papas Alioli Calientes -- Tapa: <b>3.00€</b> 1/2 Ración: <b>6.00€</b> Ración: <b>12.00€</b></li> <td>2.50€</td>
<li>Papas Alioli Frías -- Tapa: <b>2.50€</b> 1/2 Ración: <b>5.00€</b> Ración: <b>10.00€</b></li> <td>5.00€</td>
<li>Croquetas de Jamón -- Tapa: <b>3.00€</b> 1/2 Ración: <b>6.00€</b> Ración: <b>12.00€</b></li> <td>10.00€</td>
<li>Croquetas de Cola de Toro -- Tapa: <b>3.50€</b> 1/2 Ración: <b>7.00€</b> Ración: <b>14.00€</b></li> </tr>
<li>Nugget de Pollo -- Tapa: <b>3.00€</b> 1/2 Ración: <b>6.00€</b> Ración: <b>12.00€</b></li> <tr>
<li>Cachopo -- Ración: <b>8.00€</b></li> <td>Aliño de Pulpo</td>
</ul> <td>2.50€</td>
</details> <td>5.00€</td>
<details> <td>10.00€</td>
<summary><h2>En Temporada</h2></summary> </tr>
<ul> <tr>
<li>Cabrillas -- Tapa: <b>3.00€</b> 1/2 Ración: <b>6.00€</b> Ración: <b>12.00€</b></li> <td>Aliño de Huevas</td>
<li>Caracoles -- Tapa: <b>3.00€</b> 1/2 Ración: <b>6.00€</b> Ración: <b>12.00€</b></li> <td>2.50€</td>
</ul> <td>5.00€</td>
</details> <td>10.00€</td>
<details> </tr>
<summary><h2>Ibéricos</h2></summary> <tr>
<ul> <td>Huevas con Mayonesa</td>
<li>Secreto -- Ración: <b>S-P</b></li> <td>2.50€</td>
<li>Lagrimitas -- Tapa: <b>3.50€</b> 1/2 Ración: <b>7.00€</b> Ración: <b>14.00€</b></li> <td>5.00€</td>
<li>Lagarto -- Tapa: <b>3.50€</b> 1/2 Ración: <b>7.00€</b> Ración: <b>14.00€</b></li> <td>10.00€</td>
<li>Tocinito -- Tapa: <b>3.00€</b> 1/2 Ración: <b>6.00€</b> Ración: <b>12.00€</b></li> </tr>
</ul> <tr>
</details> <td>Ensalada Mixta</td>
<details> <td>-</td>
<summary><h2>Carnes</h2></summary> <td>-</td>
<ul> <td>4.00€</td>
<li>Carne Asá -- Tapa: <b>3.00€</b> 1/2 Ración: <b>6.00€</b> Ración: <b>12.00€</b></li> </tr>
<li>Solomillo al Whisky -- Tapa: <b>3.50€</b> 1/2 Ración: <b>8.00€</b> Ración: <b>16.00€</b></li> <tr>
<li>Solomillo a la Pimienta -- Tapa: <b>3.50€</b> 1/2 Ración: <b>8.00€</b> Ración: <b>16.00€</b></li> <td>Ensalada Normal</td>
<li>Solomillo al Roquefort -- Tapa: <b>3.50€</b> 1/2 Ración: <b>8.00€</b> Ración: <b>16.00€</b></li> <td>-</td>
<li>Churrasco de Pollo/Cerdo -- Ración: <b>5.50€</b></li> <td>-</td>
<li>Mini Serranito de Pollo/Cerdo -- Ración: <b>3.00€</b></li> <td>3.00€</td>
<li>Serranito de Pollo/Cerdo -- Ración: <b>5.00€</b></li> </tr>
<li>Pechuga de Pollo -- Ración: <b>5.50€</b></li> </table>
<li>Pinchito de Pollo/Cerdo -- Ración: <b>3.00€</b></li> <h2>Aperitivos</h2>
<li>Brocheta de Solomillo -- Ración: <b>7.00€</b></li> <table>
<li>Hamburguesa Simple -- Ración: <b>2.50€</b></li> <tr>
<li>Hamburguesa Completa -- Ración: <b>3.00€</b></li> <th></th>
<li>Hamburguesa de Buey -- Ración: <b>5.00€</b></li> <th>Tapa</th>
</ul> <th>1/2 Ración</th>
</details> <th>Ración</th>
<details> </tr>
<summary><h2>Montaditos</h2></summary> <tr>
<ul> <td>Papas Bravas</td>
<li>Montadito de Pollo/Cerdo -- Precio: <b>2.50€</b></li> <td>3.00€</td>
<li>Mantecadito de Pollo/Cerdo -- Precio: <b>3.00€</b></li> <td>6.00€</td>
<li>Montadito de Gambas -- Precio: <b>3.00€</b></li> <td>12.00€</td>
</ul> </tr>
</details> <tr>
<details> <td>Papas Alioli Calientes</td>
<summary><h2>Cazuelitas</h2></summary> <td>3.00€</td>
<ul> <td>6.00€</td>
<li>Carne con tomate -- Tapa: <b>3.00€</b> 1/2 Ración: <b>6.00€</b> Ración: <b>12.00€</b></li> <td>12.00€</td>
<li>Carrillada Ibérica -- Tapa: <b>3.00€</b> 1/2 Ración: <b>6.00€</b> Ración: <b>12.00€</b></li> </tr>
<li>Atún Encebollado -- Tapa: <b>3.00€</b> 1/2 Ración: <b>6.00€</b> Ración: <b>12.00€</b></li> <tr>
<li>Bacalao con Tomate -- Tapa: <b>3.00€</b> 1/2 Ración: <b>6.00€</b> Ración: <b>12.00€</b></li> <td>Papas Alioli Frías</td>
<li>Espinacas -- Tapa: <b>3.00€</b> 1/2 Ración: <b>6.00€</b> Ración: <b>12.00€</b></li> <td>2.50€</td>
</ul> <td>5.00€</td>
</details> <td>10.00€</td>
<details> </tr>
<summary><h2>Pescados</h2></summary> <tr>
<ul> <td>Croquetas de Jamón</td>
<li>Chipirón a la Plancha/Frito -- Tapa: <b>3.50€</b> 1/2 Ración: <b>8.00€</b> Ración: <b>16.00€</b></li> <td>3.00€</td>
<li>Calamares Fritos -- Tapa: <b>3.00€</b> 1/2 Ración: <b>6.00€</b> Ración: <b>12.00€</b></li> <td>6.00€</td>
<li>Choco Frito -- Tapa: <b>3.50€</b> 1/2 Ración: <b>7.00€</b> Ración: <b>14.00€</b></li> <td>12.00€</td>
<li>Boquerones -- Tapa: <b>3.00€</b> 1/2 Ración: <b>6.00€</b> Ración: <b>12.00€</b></li> </tr>
<li>Acedias -- Tapa: <b>3.00€</b> 1/2 Ración: <b>6.00€</b> Ración: <b>12.00€</b></li> <tr>
<li>Puntillitas -- Tapa: <b>3.00€</b> 1/2 Ración: <b>6.00€</b> Ración: <b>12.00€</b></li> <td>Croquetas de Cola de Toro</td>
<li>Adobo -- Tapa: <b>3.00€</b> 1/2 Ración: <b>6.00€</b> Ración: <b>12.00€</b></li> <td>3.50€</td>
<li>Brocheta de Gambas -- Tapa: <b>3.00€</b> 1/2 Ración: <b>8.00€</b> Ración: <b>14.00€</b></li> <td>7.00€</td>
<li>Pescado Variado -- 1/2 Ración: <b>7.00€</b> Ración: <b>14.00€</b></li> <td>14.00€</td>
<li>Pez Espada -- Ración: <b>8.00€</b></li> </tr>
<li>Merluza -- Ración: <b>6.00€</b></li> <tr>
<li>Dorada -- Ración: <b>6.00€</b></li> <td>Nugget de Pollo</td>
</ul> <td>3.00€</td>
</details> <td>6.00€</td>
<td>12.00€</td>
<details> </tr>
<summary><h2>Postres</h2></summary> <tr>
<td>Cachopo</td>
<td>--</td>
<td>--</td>
<td>8.00€</td>
</tr>
</table>
<h2>En Temporada</h2>
<table>
<tr>
<th></th>
<th>Tapa</th>
<th>1/2 Ración</th>
<th>Ración</th>
</tr>
<tr>
<td>Cabrillas</td>
<td>3.00€</td>
<td>6.00€</td>
<td>12.00€</td>
</tr>
<tr>
<td>Caracoles</td>
<td>3.00€</td>
<td>6.00€</td>
<td>12.00€</td>
</tr>
</table>
<h2>Ibéricos</h2>
<table>
<tr>
<th></th>
<th>Tapa</th>
<th>1/2 Ración</th>
<th>Ración</th>
</tr>
<tr>
<td>Secreto</td>
<td>--</td>
<td>--</td>
<td>S-P</td>
</tr>
<tr>
<td>Lagrimitas</td>
<td>3.50€</td>
<td>7.00€</td>
<td>14.00€</td>
</tr>
<tr>
<td>Lagarto</td>
<td>3.50€</td>
<td>7.00€</td>
<td>14.00€</td>
</tr>
<tr>
<td>Tocinito</td>
<td>3.00€</td>
<td>6.00€</td>
<td>12.00€</td>
</tr>
</table>
<h2>Carnes</h2>
<table>
<tr>
<th></th>
<th>Tapa</th>
<th>1/2 Ración</th>
<th>Ración</th>
</tr>
<tr>
<td>Carne Asá</td>
<td>3.00€</td>
<td>6.00€</td>
<td>12.00€</td>
</tr>
<tr>
<td>Solomillo al Whisky</td>
<td>3.50€</td>
<td>8.00€</td>
<td>16.00€</td>
</tr>
<tr>
<td>Solomillo a la Pimienta</td>
<td>3.50€</td>
<td>8.00€</td>
<td>16.00€</td>
</tr>
<tr>
<td>Solomillo al Roquefort</td>
<td>3.50€</td>
<td>8.00€</td>
<td>16.00€</td>
</tr>
<tr>
<td>Churrasco de Pollo/Cerdo</td>
<td>--</td>
<td>--</td>
<td>5.50€</td>
</tr>
<tr>
<td>Mini Serranito de Pollo/Cerdo</td>
<td>--</td>
<td>--</td>
<td>3.00€</td>
</tr>
<tr>
<td>Serranito de Pollo/Cerdo</td>
<td>--</td>
<td>--</td>
<td>5.00€</td>
</tr>
<tr>
<td>Pechuga de Pollo</td>
<td>--</td>
<td>--</td>
<td>5.50€</td>
</tr>
<tr>
<td>Pinchito de Pollo/Cerdo</td>
<td>--</td>
<td>--</td>
<td>3.00€</td>
</tr>
<tr>
<td>Brocheta de Solomillo</td>
<td>--</td>
<td>--</td>
<td>7.00€</td>
</tr>
<tr>
<td>Hamburguesa Simple</td>
<td>--</td>
<td>--</td>
<td>2.50€</td>
</tr>
<tr>
<td>Hamburguesa Completa</td>
<td>--</td>
<td>--</td>
<td>3.00€</td>
</tr>
<tr>
<td>Hamburguesa de Buey</td>
<td>--</td>
<td>--</td>
<td>5.00€</td>
</tr>
</table>
<h2>Montaditos</h2>
<table>
<tr>
<th></th>
<th>Precio</th>
</tr>
<tr>
<td>Montadito de Pollo/Cerdo</td>
<td>2.50€</td>
</tr>
<tr>
<td>Mantecadito de Pollo/Cerdo</td>
<td>3.00€</td>
</tr>
<tr>
<td>Montadito de Gambas</td>
<td>3.00€</td>
</tr>
</table>
<h2>Cazuelitas</h2>
<table>
<tr>
<th></th>
<th>Tapa</th>
<th>1/2 Ración</th>
<th>Ración</th>
</tr>
<tr>
<td>Carne con tomate</td>
<td>3.00€</td>
<td>6.00€</td>
<td>12.00€</td>
</tr>
<tr>
<td>Carrillada Ibérica</td>
<td>3.00€</td>
<td>6.00€</td>
<td>12.00€</td>
</tr>
<tr>
<td>Atún Encebollado</td>
<td>3.00€</td>
<td>6.00€</td>
<td>12.00€</td>
</tr>
<tr>
<td>Bacalao con Tomate</td>
<td>3.00€</td>
<td>6.00€</td>
<td>12.00€</td>
</tr>
<tr>
<td>Espinacas</td>
<td>3.00€</td>
<td>6.00€</td>
<td>12.00€</td>
</tr>
</table>
<h2>Pescados</h2>
<table>
<tr>
<th></th>
<th>Tapa</th>
<th>1/2 Ración</th>
<th>Ración</th>
</tr>
<tr>
<td>Chipirón a la Plancha/Frito</td>
<td>3.50€</td>
<td>8.00€</td>
<td>16.00€</td>
</tr>
<tr>
<td>Calamares Fritos</td>
<td>3.00€</td>
<td>6.00€</td>
<td>12.00€</td>
</tr>
<tr>
<td>Choco Frito</td>
<td>3.50€</td>
<td>7.00€</td>
<td>14.00€</td>
</tr>
<tr>
<td>Boquerones</td>
<td>3.00€</td>
<td>6.00€</td>
<td>12.00€</td>
</tr>
<tr>
<td>Acedias</td>
<td>3.00€</td>
<td>6.00€</td>
<td>12.00€</td>
</tr>
<tr>
<td>Puntillitas</td>
<td>3.00€</td>
<td>6.00€</td>
<td>12.00€</td>
</tr>
<tr>
<td>Adobo</td>
<td>3.00€</td>
<td>6.00€</td>
<td>12.00€</td>
</tr>
<tr>
<td>Brocheta de Gambas</td>
<td>3.00€</td>
<!-- Precio raro preguntar. -->
<td>8.00€</td>
<td>14.00€</td>
</tr>
<tr>
<td>Pescado Variado</td>
<td>--</td>
<td>7.00€</td>
<td>14.00€</td>
</tr>
<tr>
<td>Pez Espada</td>
<td>--</td>
<td>--</td>
<td>8.00€</td>
</tr>
<tr>
<td>Merluza.</td>
<td>--</td>
<td>--</td>
<td>6.00€</td>
</tr>
<tr>
<td>Dorada.</td>
<td>--</td>
<td>--</td>
<td>6.00€</td>
</tr>
</table>
<h2>Postres</h2>
<ol> <ol>
<li>Arroz con leche <b>2.50€</b></li> <li>Arroz con leche
<li>Natillas <b>2.50€</b></li> <b>2.50€</b></li>
<li>Flan de Huevo <b>2.50€</b></li> <li>Natillas
<li>Helados Nestle <b>3.00€</b></li> <b>2.50€</b></li>
<li>Flan de Huevo
<b>2.50€</b></li>
<li>Helados Nestle
<b>3.00€</b></li>
</ol> </ol>
</details>
<p>Por último desde Burguillos.info os indicamos que el precio <p>Por último desde Burguillos.info os indicamos que el precio
por el servicio de pan y picos por comensal es de 0.50€ y que por el servicio de pan y picos por comensal es de 0.50€ y que
tenéis la posibilidad de pedir un extra en salsas por tenéis la posibilidad de pedir un extra en salsas por

View File

@ -0,0 +1,31 @@
<post>
<author>Burguillos.info</author>
<date>2022-11-25T17:20+00:00</date>
<title>Di no a la violencia machísta.</title>
<ogdesc>Di no a la violencia machísta.</ogdesc>
<category>index</category>
<slug>25-n-di-no-a-la-violencia-machista</slug>
<img src="/img/feminismo.webp"/>
<content>
<img alt="Simbolo feminista" src="/img/feminismo.webp"/>
<p>Hoy, día 25 de Noviembre se celebra el día contra la violencia machísta.</p>
<p>Se estima que el setenta por ciento de las mujeres sufre este tipo de violencia a lo largo de su vida<sup><a href="#cita1">1</a></sup></p>
<p>Desde Burguillos.info hacemos un llamamiento a la ciudadanía de Burguillos para plantar cara a estos abusos y crear una red de solidaridad con las víctimas ya que muchas de ellas tras liberarse de su agresor afrontan una situación de alta precariedad tanto económica como social, en muchas ocasiones con cargas familiares a las que mantener.</p>
<p>Si resides en España y eres víctima de este tipo de violencia el teléfono <a href="tel:016">016</a> de atención para víctimas de violencia machísta no deja rastro en tu factura; no obstante según tu teléfono puedes tener que borrarlo manualmente del registro de llamadas.</p>
<p>La página <a href="https://violenciagenero.igualdad.gob.es/informacionUtil/recursos/home.htm">https://violenciagenero.igualdad.gob.es/informacionUtil/recursos/home.htm</a> contiene recursos online de utilidad para mujeres que son o han sido víctimas de maltrato.</p>
<h3>Referencias.</h3>
<p>
<a id="cita1" href="https://web.archive.org/web/20131227234937/https://www.un.org/es/events/endviolenceday/pdfs/unite_the_situation_sp.pdf">
1. Documento archivado de la organización de las
naciones unidas sobre la situación de la
violencia machista en 2013
</a>
</p>
</content>
</post>

View File

@ -14,6 +14,7 @@
</attributes> </attributes>
<slug>cafe-bar-beluche</slug> <slug>cafe-bar-beluche</slug>
<content> <content>
<h2 style="background: black; color: red;">Menú actualizado con nuevos precios y productos 2023-09-13</h2>
<img width="50%" alt="Front door of 'Café-Bar Beluche'" style="border: solid 1px black;" src="/img/beluche.webp"/> <img width="50%" alt="Front door of 'Café-Bar Beluche'" style="border: solid 1px black;" src="/img/beluche.webp"/>
<h2>Información de contacto para preparación de pedidos y envío a domicilio.</h2> <h2>Información de contacto para preparación de pedidos y envío a domicilio.</h2>
@ -22,119 +23,402 @@
<p>Su ubicación en calle Albahaca número 13 es inmejorable, ofreciendo terrazas a parte de mesas en el interior.</p> <p>Su ubicación en calle Albahaca número 13 es inmejorable, ofreciendo terrazas a parte de mesas en el interior.</p>
<p>El teléfono de contacto es <a href="tel:+34691492054">691 492 054</a>, puedes usarlo para reservar, pedir comida a domicilio o pedir que te preparen platos para llevar.</p> <p>Los teléfonos de contacto son <a href="tel:+34694200713">694 200 713</a> y <a href="tel:+34691492054">691 492 054</a>, puedes usarlos para reservar, pedir comida a domicilio o pedir que te preparen platos para llevar.</p>
<p>Procedemos a transcribir la carta a continuación:</p> <p>Procedemos a transcribir la carta a continuación:</p>
<details> <h3>Ensaladas</h3>
<summary><h3>Ensaladas</h3></summary>
<ul> <table>
<li>Mixta -- Precio: <b>6.00€</b></li> <tr>
<li>César -- Precio: <b>6.50€</b></li> <th>Nombre</th>
<li>Trópical -- Precio: <b>N/A</b></li> <th>Precio</th>
</ul> </tr>
</details> <tr>
<details> <td>Mixta</td>
<summary><h3>Revueltos</h3></summary> <td>6.00€</td>
<ul> </tr>
<li>Gula langostinos -- Precio: <b>7.50€</b></li> <tr>
<li>Bacalao dorado -- Precio: <b>7.50€</b></li> <td>César</td>
<li>Morcilla de arroz -- Precio: <b>7.50€</b></li> <td>6.50€</td>
</ul> </tr>
</details> <tr>
<details> <td>Trópical</td>
<summary><h3>Tapas frías.</h3></summary> <td>6.50€</td>
<ul> </tr>
<li>Ensaladilla rusa -- Tapa: <b>3.00€</b> Plato: <b>6.00€</b></li> </table>
<li>Aliños del día (Aliño Melva/Salpicón de marisco) -- Tapa: <b>3.00€</b> Plato: <b>6.00€</b></li>
<li>Cóctel de mariscos -- Plato: <b>4.00€</b></li>
<li>Ensaladilla de cangrejo -- Tapa: <b>3.50€</b> Plato: <b>7.00€</b></li> <h3>Revueltos</h3>
</ul>
</details> <table>
<details> <tr>
<summary><h3>Para compartir</h3></summary> <th>Nombre</th>
<ul> <th>Precio</th>
<li>Papas bravas -- Precio tapa: <b>3.50€</b> Precio plato: <b>6.00€</b></li> </tr>
<li>Papas de mi prima -- Precio tapa: <b>3.50€</b> Precio plato: <b>6.00€</b></li> <tr>
<li>Papas arrieras -- Precio tapa: <b>3.80€</b> Precio plato: <b>7.00€</b></li> <td>Gula langostinos</td>
<li>Bartolitos. (Langostinos con bacon) -- Precio tapa: <b>3.80€</b> Precio plato: <b>6.00€</b></li> <td>7.50€</td>
<li>Queso rulo con bacon, nueces y miel de caña -- Precio tapa: <b>3.80€</b> Precio plato: <b>6.00€</b></li> </tr>
<li>Morcilla crocanti -- Precio tapa: <b>3.50€</b> Precio plato: <b>6.00€</b></li> <tr>
<li>Muss de pato -- Precio tapa: <b>4.00€</b> Precio plato: <b>8.00€</b></li> <td>Bacalao dorado</td>
<li>Duo de rulo y muss de pato -- Precio plato: <b>7.00€</b></li> <td>7.50€</td>
<li>Talegitas de queso -- Precio tapa: <b>3.50€</b> Precio plato: <b>6.00€</b></li> </tr>
<li>Champiñones con alioli y jamón -- Precio tapa: <b>3.50€</b> Precio plato: <b>6.50€</b></li> <tr>
<li>Fideos tostados -- Precio plato: <b>4.00€</b></li> <td>Morcilla de arroz</td>
<li>Variado de croquetas -- Precio plato: <b>11.00€</b></li> <td>7.50€</td>
<li>Croquetas de secreto y miel -- Precio tapa: <b>4.00€</b> Precio plato: <b>8.00€</b></li> </tr>
</ul> </table>
</details>
<details> <h3>Tapas frías.</h3>
<summary><h3>Rico rico</h3></summary>
<ul> <table>
<li>Pollo kentucky -- Precio tapa: <b>3.50€</b> Precio plato: <b>7.00€</b></li> <tr>
<li>Pollo mostaza -- Precio tapa: <b>4.50€</b> Precio plato: <b>8.50€</b></li> <th>Nombre</th>
<li>Huevos rotos -- Precio plato: <b>5.00€</b></li> <th>Tapa</th>
<li>Pan bao -- Precio tapa: <b>5.00€</b> Precio plato: <b>10.00€</b></li> <th>Plato</th>
<li>Carrillada ibérica -- Precio tapa: <b>3.50€ (Preguntar, en menú real 8.50€)</b> Precio plato: <b>7.00€</b></li> </tr>
</ul> <tr>
</details> <td>Ensaladilla rusa</td>
<details> <td>3.00€</td>
<summary><h3>Arroces</h3></summary> <td>6.00€</td>
<ul> </tr>
<li>Timbal de arroz con chipirones y alioli -- Tapa: <b>4.00€</b> Plato: <b>7.50€</b></li> <tr>
<li>Arroz negro -- Tapa: <b>4.50€</b> Plato: <b>8.50€</b></li> <td>Aliños del día (Aliño Melva/Salpicón de marisco)</td>
<li>Rissotto cuatro quesos -- Tapa: <b>4.50€</b> Plato: <b>8.50€</b></li> <td>3.00€</td>
</ul> <td>6.00€</td>
</details> </tr>
<details> <tr>
<summary><h3>Pescados</h3></summary> <td>Cóctel de mariscos</td>
<ul> <td>---</td>
<li>Gambas al ajillo -- Precio tapa: <b>4.50€</b> Precio plato: <b>8.00€</b></li> <td>4.00€</td>
<li>Gambas a la plancha -- Precio tapa: <b>5.00€</b> Precio plato: <b>10.00€</b></li> </tr>
<li>Flamenquín de melva -- Precio tapa: <b>3.50€</b> Precio plato: <b>7.00€</b></li> <tr>
<li>Chipirones -- Precio tapa: <b>4.00€</b> Precio plato: <b>7.50€</b></li> <td>Ensaladilla de cangrejo</td>
<li>Choco -- Precio plato: <b>S/P</b></li> <td>3.50€</td>
<li>Lubina -- Precio plato: <b>S/P</b></li> <td>7.00€</td>
<li>Pez espada -- Precio plato: <b>12.00€</b></li> </tr>
<li>Merluza confitada -- Precio plato: <b>8.00€</b></li> </table>
<li>Bacalao confitado -- Precio plato: <b>9.00€</b></li>
<li>Montadito de gambas con alioli -- Precio plato: <b>3.20€</b></li> <h3>Para compartir</h3>
<li>Almejas con langostinos -- Precio tapa: <b>4.50€</b> Precio plato: <b>8.00€</b></li>
</ul> <table>
</details> <tr>
<details> <th>Nombre</th>
<summary><h3>Carnes</h3></summary> <th>Precio tapa</th>
<ul> <th>Precio plato</th>
<li>Solomillo de pavo -- Precio plato: <b>9.00€</b></li> </tr>
<li>Medallones de solomillo (Roque, whisky, mojo) -- Precio tapa: <b>3.50€</b> Precio plato: <b>6.50€</b></li> <tr>
<li>Solomillo rulo de queso y miel de caña -- Precio tapa: <b>4.00€</b> Precio plato: <b>7.50€</b></li> <td>Papas bravas</td>
<li>Solomillo ibérico -- Precio plato: <b>12.50€</b></li> <td>3.50€</td>
<li>Abanico ibérico -- Precio plato: <b>12.50€</b></li> <td>6.00€</td>
<li>Presa ibérica -- Precio plato: <b>14.00€</b></li> </tr>
<li>Presa con mostaza -- Precio tapa: <b>4.00€</b> Precio plato: <b>8.00€</b></li> <tr>
<li>Presa con setas y roquefort -- Precio tapa: <b>4.50€</b> Precio plato: <b>9.00€</b></li> <td>Papas de mi prima</td>
<li>Chuletón de ternera -- Precio plato: <b>S/P</b></li> <td>3.50€</td>
<li>Entrecot de ternera -- Precio plato: <b>S/P</b></li> <td>6.00€</td>
<li>Chuletón de vaca vieja madurada -- Precio plato: <b>S/P</b></li> </tr>
<li>Entrecot de vaca vieja -- Precio plato: <b>S/P</b></li> <tr>
<li>Hamburguesa de buey -- Precio plato: <b>5.50€</b></li> <td>Papas arrieras</td>
<li>Mini hamburguesa -- Precio plato: <b>3.00€</b></li> <td>3.80€</td>
<li>Montadito de pollo o lomo -- Precio plato: <b>3.00€</b></li> <td>7.00€</td>
<li>Montadito de solomillo y queso viejo -- Precio plato: <b>3.80€</b></li> </tr>
<li>Serranito -- Precio plato: <b>5.50€</b></li> <tr>
<li>Mini serranito de pollo o lomo -- Precio plato: <b>4.00€</b></li> <td>Bartolitos. (Langostinos con bacon)</td>
</ul> <td>3.80€</td>
</details> <td>6.00€</td>
<details> </tr>
<summary><h3>Postres</h3></summary> <tr>
<ul> <td>Queso rulo con bacon, nueces y miel de caña</td>
<li>Gofres con nata y chocolate -- Precio: <b>3.80€</b></li> <td>3.80€</td>
<li>Tortitas americanas -- Precio: <b>4.00€</b></li> <td>6.00€</td>
<li>Tarta (Porción) -- Precio: <b>3.80€</b></li> </tr>
<li>Coulant con helado de vainilla -- Precio: <b>4.00€</b></li> <tr>
</ul> <td>Morcilla crocanti</td>
</details> <td>3.50€</td>
<td>6.00€</td>
</tr>
<tr>
<td>Muss de pato</td>
<td>4.00€</td>
<td>8.00€</td>
</tr>
<tr>
<td>Duo de rulo y muss de pato</td>
<td>---</td>
<td>7.00€</td>
</tr>
<tr>
<td>Talegitas de queso</td>
<td>3.50€</td>
<td>6.00€</td>
</tr>
<tr>
<td>Champiñones con alioli y jamón</td>
<td>3.50€</td>
<td>6.50€</td>
</tr>
<tr>
<td>Fideos tostados</td>
<td>---</td>
<td>4.00€</td>
</tr>
<tr>
<td>Variado de croquetas</td>
<td>---</td>
<td>11.00€</td>
</tr>
<tr>
<td>Croquetas de secreto y miel</td>
<td>4.00€</td>
<td>8.00€</td>
</tr>
</table>
<h3>Rico rico</h3>
<table>
<tr>
<th>Nombre</th>
<th>Precio tapa</th>
<th>Precio plato</th>
</tr>
<tr>
<td>Pollo kentucky</td>
<td>---</td>
<td>3.50€</td>
</tr>
<tr>
<td>Pollo mostaza</td>
<td>4.50€</td>
<td>8.50€</td>
</tr>
<tr>
<td>Huevos rotos</td>
<td>---</td>
<td>5.00€</td>
</tr>
<tr>
<td>Pan bao</td>
<td>5.00€</td>
<td>10.00</td>
</tr>
<tr>
<td>Carrillada ibérica</td>
<td>3.50€</td>
<td>7.00€</td>
</tr>
</table>
<h3>Arroces</h3>
<table>
<tr>
<td>Nombre</td>
<td>Tapa</td>
<td>Plato</td>
</tr>
<tr>
<td>Timbal de arroz con chipirones y alioli</td>
<td>4.00€</td>
<td>7.50€</td>
</tr>
<tr>
<td>Arroz negro</td>
<td>4.50€</td>
<td>8.50€</td>
</tr>
<tr>
<td>Bissotio cuatro quesos</td>
<td>4.50€</td>
<td>8.50€</td>
</tr>
</table>
<h3>Pescados</h3>
<table>
<tr>
<th>Nombre</th>
<th>Precio tapa</th>
<th>Precio plato</th>
</tr>
<tr>
<td>Gambas al ajillo</td>
<td>4.50€</td>
<td>8.00€</td>
</tr>
<tr>
<td>Flamenquín de melva</td>
<td>3.50€</td>
<td>7.00€</td>
</tr>
<tr>
<td>Chipirones</td>
<td>4.00€</td>
<td>7.50€</td>
</tr>
<tr>
<td>Choco</td>
<td>---</td>
<td>S/P</td>
</tr>
<tr>
<td>Lubina</td>
<td>---</td>
<td>S/P</td>
</tr>
<tr>
<td>Pez espada</td>
<td>---</td>
<td>12.00€</td>
</tr>
<tr>
<td>Merluza confitada</td>
<td>---</td>
<td>8.00€</td>
</tr>
<tr>
<td>Bacalao confitado</td>
<td>---</td>
<td>9.00€</td>
</tr>
<tr>
<td>Montadito de gambas con alioli</td>
<td>---</td>
<td>3.20€</td>
</tr>
<tr>
<td>Almejas con langostinos</td>
<td>4.50€</td>
<td>8.00€</td>
</tr>
</table>
<h3>Carnes</h3>
<table>
<tr>
<th>Nombre</th>
<th>Precio tapa</th>
<th>Precio plato</th>
</tr>
<tr>
<td>Solomillo de pavo</td>
<td>---</td>
<td>9.00€</td>
</tr>
<tr>
<td>Medallones de solomillo (Roque, whisky, mojo)</td>
<td>3.50€</td>
<td>6.50€</td>
</tr>
<tr>
<td>Solomillo rulo de queso y miel de caña</td>
<td>4.00€</td>
<td>7.50€</td>
</tr>
<tr>
<td>Solomillo ibérico</td>
<td>---</td>
<td>12.50€</td>
</tr>
<tr>
<td>Abanico ibérico</td>
<td>---</td>
<td>12.50€</td>
</tr>
<tr>
<td>Presa ibérica</td>
<td>---</td>
<td>14.00€</td>
</tr>
<tr>
<td>Presa con mostaza</td>
<td>4.00€</td>
<td>8.00€</td>
</tr>
<tr>
<td>Presa con setas y roquefort</td>
<td>4.50€</td>
<td>9.00€</td>
</tr>
<tr>
<td>Chuletón de ternera</td>
<td>---</td>
<td>S/P</td>
</tr>
<tr>
<td>Entrecot de ternera</td>
<td>---</td>
<td>S/P</td>
</tr>
<tr>
<td>Chuletón de vaca vieja madurada</td>
<td>---</td>
<td>S/P</td>
</tr>
<tr>
<td>Entrecot de vaca vieja</td>
<td>---</td>
<td>S/P</td>
</tr>
<tr>
<td>Hamburguesa de buey</td>
<td>---</td>
<td>5.50€</td>
</tr>
<tr>
<td>Mini hamburguesa</td>
<td>---</td>
<td>3.00€</td>
</tr>
<tr>
<td>Montadito de pollo o lomo</td>
<td>---</td>
<td>3.00€</td>
</tr>
<tr>
<td>Montadito de solomillo y queso viejo</td>
<td>---</td>
<td>3.80</td>
</tr>
<tr>
<td>Serranito</td>
<td>---</td>
<td>5.50€</td>
</tr>
<tr>
<td>Mini de pollo o lomo</td>
<td>---</td>
<td>4.00€</td>
</tr>
</table>
<h3>Postres</h3>
<table>
<tr>
<th>Nombre</th>
<th>Precio</th>
</tr>
<tr>
<td>Gofres con nata y chocolate</td>
<td>3.80€</td>
</tr>
<tr>
<td>Tortitas americanas</td>
<td>4.00€</td>
</tr>
<tr>
<td>Tarta (Porción)</td>
<td>3.80€</td>
</tr>
<tr>
<td>Coulant con helado de vainilla</td>
<td>4.00€</td>
</tr>
</table>
<p>¿Quieres ver tu negocio localizado en Burguillos en este espacio? Contacta con <a href="mailto:contact@owlcode.tech">contact@owlcode.tech</a>.</p> <p>¿Quieres ver tu negocio localizado en Burguillos en este espacio? Contacta con <a href="mailto:contact@owlcode.tech">contact@owlcode.tech</a>.</p>
</content> </content>

View File

@ -0,0 +1,20 @@
<post>
<author>Burguillos.info</author>
<date>2023-05-08T22:14:00+02:00</date>
<title>Jornada de puertas abiertas "Guillena con el pueblo saharaui".</title>
<ogdesc>Jornada de puertas abiertas "Guillena con el pueblo saharaui".</ogdesc>
<category>index</category>
<img src="/img/sahara-adopta.webp"/>
<slug>sahara-acogida-ninos</slug>
<content>
<img style="border: 1px black solid;" src="/img/sahara-adopta.webp" alt="Transcript: Jornada de puertas abiertas Guillena adopta sonrisas. (Guillena con el pueblo saharahui)"/>
<h2>Acogida urgente de niños saharauis, se buscan familias de Sevilla, Burguillos, Alcalá del río, Castilblanco de los arroyos, la Rinconada, Guillena.</h2>
<p>La asociación "Guillena con el pueblo saharaui" organiza una jornada de puertas abiertas en Guillena calle Manuel Romero Romero número 1 el día 12 de Mayo de 2023 a las 20:30.</p>
<p>Estáis invitados a asistir, por otro lado se informa de la necesidad urgente de familias dispuestas a acoger de forma temporal a niños saharauis, contactad con este email <a href="mailto:guillenaconelpueblosaharaui@gmail.com">guillenaconelpueblosaharaui@gmail.com</a> para recibir toda la información si estais dispuestos a acoger a uno de estos niños.</p>
<p>Se actualizará con más información este artículo en los próximos días.</p>
</content>
</post>

View File

@ -13,28 +13,17 @@
</attributes> </attributes>
<slug>hamburgueseria-la-ermita</slug> <slug>hamburgueseria-la-ermita</slug>
<content> <content>
<h2 style="background: black; color: red;">Menú actualizado con nuevos precios y productos 2024-05-21.</h2>
<img width="50%" alt="Front door of 'Hamburguesería la Ermita'" style="border: solid 1px black;" src="/img/hamburgueseria-la-ermita.webp"/> <img width="50%" alt="Front door of 'Hamburguesería la Ermita'" style="border: solid 1px black;" src="/img/hamburgueseria-la-ermita.webp"/>
<h2>Información de contacto para preparación de pedidos.</h2> <h2>Información de contacto para preparación de pedidos.</h2>
<p>La Hamburguesería Pizzería la Ermita es una de las hamburgueserías/pizzerías más populares del pueblo, <p>(Parrafo actualizado tras la cata del equipo de Burguillos.info) La hamburguesería la Ermita es un restaurante de nueva apertura, sus hamburguesas son de una calidad excelente, los tiempos de espera para la preparación son cortos y cuídan hasta el mínimo detalle.</p>
sus hamburguesas son de una calidad excelente, los tiempos de espera para la preparación son
cortos y la comida está buenisima.</p>
<p>Siguelos en instagram <a href="https://www.instagram.com/pizzeriaburguillos/">@pizzeriaburguillos</a>
o en Tiktok <a href="https://www.tiktok.com/@hamburgueserialaermita_3">@hamburgueserialaermita_3</a>.</p>
<p>Los horarios son de martes a domingo de 20:00 a 00:00 horas.</p>
<p>Su localización es calle Cádiz número 3 y su número de teléfono para la preparación de pedidos y envío a domicilio es <a href="tel:+34682283189">682 283 189</a>.</p> <p>Su localización es calle Cádiz número 3 y su número de teléfono para la preparación de pedidos y envío a domicilio es <a href="tel:+34682283189">682 283 189</a>.</p>
<p>Procedemos a listar la carta.</p> <p>Procedemos a listar la carta.</p>
<details> <h3>Entrantes.</h3>
<summary><h3>Entrantes.</h3></summary>
<ul> <ul>
<li>Alitas <b>3€ tapa</b>.</li> <li>Alitas <b>3€ tapa</b>.</li>
@ -45,27 +34,22 @@
<li>Crujientes de pollo <b>3€ tapa</b>.</li> <li>Crujientes de pollo <b>3€ tapa</b>.</li>
<li>Lagrimitas <b>3€ tapa</b>.</li> <li>Lagrimitas <b>3€ tapa</b>.</li>
<li>Croquetas de jamón / queso azul y cebolla caramelizada / pizza <b>3€ tapa</b>.</li> <li>Croquetas de jamón / queso azul y cebolla caramelizada / pizza <b>3€ tapa</b>.</li>
<li>Patatas alioli <b>3€ tapa 5.50€ plato</b>.</li> <li>Patatas alioli <b>2.50€ tapa 4€ plato</b>.</li>
<li>Ensaladilla <b>3€ tapa 5.50€ plato</b>.</li> <li>Ensaladilla <b>2.50€ tapa 4€ plato</b>.</li>
<li>Croquetas caseras <b>4.50€ tapa</b>.</li>
<li>Capirote de Gambas <b>4.50€ tapa</b>.</li>
<li>Langostino Mariposa <b>4.50€ tapa</b>.</li>
<li>Delicias de Pollo Cajun <b>3.50€ tapa</b>.</li>
<li>Mini Philadelphia <b>3.50€ tapa</b>.</li>
<li>Bolitas Ibéricas <b>3.50€ tapa</b>.</li>
</ul> </ul>
</details>
<details> <h3>Pizzas.</h3>
<summary><h3>Pizzas.</h3></summary>
<p>Todas las pizzas vienen con 2 ingredientes incluidos en el precio, puedes añadir un ingrediente extra por 0.70€ o una salsa extra por 0.50€.</p> <p>Todas las pizzas vienen con 2 ingredientes incluidos en el precio, por 0.60€ puedes añadir un ingrediente extra por 0.60€ o una salsa extra por 0.30€.</p>
<p>Tienes la posibilidad de pedir una pizza mediana nutella por 5.50€ desde Burguillos.info suponemos que no se permiten
otros ingredientes para evitar aberraciones gastronómicas.</p>
<h4>Tamaño de pizza.</h4> <h4>Tamaño de pizza.</h4>
<ul> <ul>
<li>Mediana <b>5.90€</b>.</li> <li>Mediana <b>5.50€</b>.</li>
<li>Grande <b>9.50€</b>.</li> <li>Grande <b>9.00€</b>.</li>
</ul> </ul>
<h4>Ingredientes disponibles.</h4> <h4>Ingredientes disponibles.</h4>
@ -97,140 +81,116 @@
<li>Pollo asado y salsa kebab</li> <li>Pollo asado y salsa kebab</li>
<li>4 quesos</li> <li>4 quesos</li>
</ul> </ul>
</details>
<details> <h3>Bebidas.</h3>
<summary><h3>Carnes.</h3></summary>
<ul> <ul>
<li>Pechuga y patatas <b>5.90€ plato</b>.</li> <li>Refresco <b>1.50€</b></li>
<li>Solomillo (Whisky, roquefort o pimienta) <b>3.00€ tapa 7.00€ plato</b>.</li> <li>Cerveza de barril <b>1.30€</b></li>
<li>Tercio <b>1.50€</b></li>
<li>Tinto <b>1.50€</b></li>
<li>Radler <b>1.50€</b></li>
<li>Cerveza sin alcohol botellín <b>1.20€</b></li>
<li>Litro <b>3.00€</b></li>
<li>Agua pequeña <b>0.80€</b></li>
<li>Agua grande <b>1.20€</b></li>
<li>Zumo <b>1.00€</b></li>
<li>Café e infusión <b>1.20€</b></li>
<li>Combinado <b>4.50€</b></li>
</ul> </ul>
</details>
<details> <h3>Helados.</h3>
<summary><h3>Patatas gratinadas.</h3></summary>
<ul>
<li>Sandy <b>2.20€</b></li>
<li>Mini Sandy <b>1.50€</b></li>
<li>Mix Sandy <b>3.20€</b></li>
<li>Mini Mix Sandy <b>2.50€</b></li>
<li>Batido pequeño <b>2.50€</b></li>
<li>Batido grande <b>3.20€</b></li>
</ul>
<h3>Bocadillos.</h3>
<ul>
<li>Tortilla <b>3.00€</b></li>
<li>Cochinito <b>3.00€</b></li>
<li>Lomo adobado <b>3.00€</b></li>
<li>Bacon y queso <b>3.00€</b></li>
<li>Atún y pimiento <b>3.00€</b></li>
<li>Carne mechada y chimichurri <b>3.50€</b></li>
<li>Filete de lomo, mayonesa y lechuga <b>3.50€</b></li>
<li>Serranito de pollo o cerdo <b>4.50€</b></li>
</ul>
<h3>Montaditos.</h3>
<ul>
<li>Gambas alioli <b>2.50€</b></li>
<li>Melva con pimiento <b>2.50€</b></li>
<li>Carne mechada con chimichurri <b>2.50€</b></li>
<li>Solomillo (Whisky, roquefort o pimienta) <b>2.50€</b></li>
<li>Pollo o lomo <b>2.50€</b></li>
</ul>
<h3>Perritos.</h3>
<ul>
<li>Simple (Salchicha + salsa) <b>2.00€</b></li>
<li>Completo (Salchicha, cebolla frita, zanahoria, patatas paja y salsa) <b>2.50€</b></li>
</ul>
<h3>Carnes.</h3>
<ul>
<li>Pechuga y patatas <b>5.00€ plato</b>.</li>
<li>Solomillo (Whisky, roquefort o pimienta) <b>3.00€ tapa 5.00€ plato</b>.</li>
</ul>
<h3>Patatas gratinadas.</h3>
<p>En formato pequeño cuestan 4.00€ y en formato grande 6.00€, a elegir entre las siguientes combinaciones.</p> <p>En formato pequeño cuestan 4.00€ y en formato grande 6.00€, a elegir entre las siguientes combinaciones.</p>
<ul> <ul>
<li>Alioli + queso + bacon <b>4.50€</b>.</li> <li>Alioli + queso + bacon.</li>
<li>Salsa cheedar + bacon + cebolla frita <b>4.50€</b>.</li> <li>Salsa cheedar + bacon + cebolla frita.</li>
<li>Salsa kebab + carne kebab <b>4.50€</b>.</li> <li>Salsa kebab + carne kebab.</li>
<li>Gaucha -- Salsa Gaucha, Salchicha <b>4.50€</b>.</li>
<li>Ranchera -- Salsa Ranchera, Pollo <b>4.50€</b>.</li>
<li>Patatas Bravas <b>4.50€</b>.</li>
</ul> </ul>
</details>
<details> <h3>Patatas normales.</h3>
<summary><h3>Patatas normales.</h3></summary>
<ul> <ul>
<li>Pequeñas <b>1.00€</b></li> <li>Pequeñas <b>1.00€</b></li>
<li>Grandes <b>1.50€</b></li> <li>Grandes <b>1.50€</b></li>
<li>Gajo <b>grande 1.50€</b></li> <li>Gajo <b>grande 1.50€</b></li>
<li>Cris Criss - Cross <b>grande 2.00€</b></li>
</ul> </ul>
</details>
<details> <h3>Hamburguesas.</h3>
<summary><h3>Hamburguesas.</h3></summary>
<p>Puedes solicitar un extra en salsa por 0.50€.</p> <p>Puedes solicitar un extra en salsa por 0.50€.</p>
<ul> <ul>
<li>Solo carne <b>1.80€</b>.</li> <li>Solo carne <b>1.50€</b>.</li>
<li>Solo queso <b>2.30€</b>.</li> <li>Solo queso <b>2.00€</b>.</li>
<li>BBQ (Carne, salsa barbacoa, queso y pepinillo) <b>2.90€</b>.</li> <li>BBQ (Carne, salsa barbacoa, queso y pepinillo) <b>2.50€</b>.</li>
<li>Texas (Carne, salsa barbacoa, queso y aros de cebolla) <b>2.90€</b>.</li> <li>Texas (Carne, salsa barbacoa, queso y aros de cebolla) <b>2.50€</b>.</li>
<li>Cheedar simple (Carne, salsa cheedar, tomate, cebolla frita) <b>2.90€</b>.</li> <li>Cheedar simple (Carne, salsa cheedar, tomate, cebolla frita) <b>2.50€</b>.</li>
<li>Salad (Carne, mayonesa, lechuga y tomate) <b>2.90€</b>.</li> <li>Salad (Carne, mayonesa, lechuga y tomate) <b>2.50€</b>.</li>
<li>Chicken Burguer (Mayonesa, lechuga, pollo rebozado) <b>3.00€</b>.</li> <li>Porky (Carne cerdo, bacon, salsa bacon, queso, tomate, cebolla frita) + patatas <b>6.50€</b>.</li>
<li>Crispi Chicken (Mayonesa, lechuga, tomate, pollo crujiente) <b>5.50€</b>.</li> <li>Roquefort (Carne mixta, salsa roquefort, lechuga, tomate, queso granapadano, bacon y cebolla frita) + patatas <b>6.50€</b>.</li>
<li>Porky (Carne cerdo, bacon, salsa bacon, queso, tomate, cebolla frita) + patatas <b>6.90€</b>.</li> <li>Campera (Pollo campero, mayonesa, lechuga, tomate, queso y bacon) + patatas <b>6.50€</b>.</li>
<li>Campera (Pollo campero, mayonesa, lechuga, tomate, queso y bacon) + patatas <b>6.90€</b>.</li> <li>Miel y mostaza (Carne mixta, rúcula, tomate, cebolla caramelizada, queso gouda, bacon, salsa miel y mostaza) + patatas <b>6.50€</b>.</li>
<li>Miel y mostaza (Carne mixta, rúcula, tomate, cebolla caramelizada, queso gouda, bacon, salsa miel y mostaza) + patatas <b>6.90€</b>.</li> <li>Boletus (Carne mixta, queso gouda, bacon, champiñones y salsa boletus) + patatas <b>6.50€</b>.</li>
<li>La Ermita (Carne retinto, salsa barbacoa especial, tomate, cebolla frita, rulo de cabra y bacon) + patatas <b>7.90€</b>.</li> <li>La Ermita (Carne retinto, salsa barbacoa especial, tomate, cebolla frita, rulo de cabra y bacon) + patatas <b>7.50€</b>.</li>
<li>Cabrales (Carne mixta, salsa cabrales, gouda, bacon, lechuga, tomate y queso) + patatas <b>6.90€</b>.</li> <li>Cabrales (Carne mixta, salsa cabrales, gouda, bacon, lechuga, tomate y queso) + patatas <b>6.50€</b>.</li>
<li>Cheedar (Carne mixta o pollo empanado, salsa cheedar, cebolla frita, tomate, queso y bacon) + patatas <b>6.90€</b>.</li> <li>Cheedar (Carne mixta o pollo empanado, salsa cheedar, cebolla frita, tomate, queso y bacon) + patatas <b>6.50€</b>.</li>
<li>Completa (Carne mixta, mayonesa, lechuga, cebolla frita, tomate, pepinillo y cebolla) + patatas <b>6.90€</b>.</li> <li>Completa (Carne mixta, mayonesa, lechuga, cebolla frita, tomate, pepinillo y cebolla) + patatas <b>6.50€</b>.</li>
<li>Huevo (Carne mixta, mayonesa, lechuga, cebolla frita, tomate, queso, huevo y bacon) + patatas <b>6.90€</b>.</li> <li>Huevo (Carne mixta, mayonesa, lechuga, cebolla frita, tomate, queso, huevo y bacon) + patatas <b>6.50€</b>.</li>
<li>Steak (Carne mixta, mayonesa, lechuga, tomate, queso, bacon y salsa bbq) + patatas <b>6.90€</b>.</li> <li>Steak (Carne mixta, mayonesa, lechuga, tomate, queso, bacon y salsa bbq) + patatas <b>6.50€</b>.</li>
<li>Cheese bacon (Carne mixta, queso, bacon, pepinillo, ketchup, mostaza y cebolla) + patatas <b>6.90€</b>.</li> <li>Cheese bacon (Carne mixta, queso, bacon, pepinillo, ketchup, mostaza y cebolla) + patatas <b>6.50€</b>.</li>
<li>Whisky (Carne Angus, salsa whisky, lechuga, tomate, rulo de cabra, cebolla caramelizada, bacon) + patatas <b>7.90€</b>.</li> <li>Romana (Carne mixta, salsa bbq, lechuga, tomate, queso y aros de cebolla) + patatas <b>6.50€</b>.</li>
<li>Trufada (Carne mixta, mayonesa trufada, lechuga, tomate, queso, bacon, cebolla) + patatas <b>7.90€</b>.</li>
<li>Mangonesa (Carne pollo campero, mayonesa, curry y mango, lechuga, tomate, queso, bacon, cebolla caramelizada) + patatas <b>7.90€</b>.</li>
<li>Hamburguesa semanal + patatas (Sujeto a disponibilidad, unidades limitadas) <b>12€</b>.</li>
</ul> </ul>
</details>
<details>
<summary><h3>Bocadillos.</h3></summary>
<ul>
<li>Tortilla <b>3.50€</b></li>
<li>Cochinito <b>3.20€</b></li>
<li>Lomo adobado <b>3.20€</b></li>
<li>Bacon y queso <b>3.20€</b></li>
<li>Atún y pimiento <b>3.20€</b></li>
<li>Carne mechada y chimichurri <b>3.70€</b></li>
<li>Filete de lomo, mayonesa y lechuga <b>3.90€</b></li>
<li>Serranito de pollo o cerdo <b>4.90€</b></li>
</ul>
</details>
<details>
<summary><h3>Montaditos.</h3></summary>
<ul>
<li>Gambas alioli <b>3.00€</b></li>
<li>Melva con pimiento <b>3.00€</b></li>
<li>Carne mechada con chimichurri <b>3.00€</b></li>
<li>Solomillo (Whisky, roquefort o pimienta) <b>3.00€</b></li>
<li>Pollo o lomo <b>3.00€</b></li>
<li>Pringa <b>3.50€</b></li>
</ul>
</details>
<details>
<summary><h3>Perritos.</h3></summary>
<ul>
<li>Simple (Salchicha + salsa) <b>2.20€</b></li>
<li>Completo (Salchicha, cebolla frita, zanahoria, patatas paja y salsa) <b>2.70€</b></li>
</ul>
</details>
<details>
<summary><h3>Bebidas.</h3></summary>
<ul>
<li>Refresco <b>1.50€</b></li>
<li>Cerveza de barril <b>1.40€</b></li>
<li>Tercio <b>1.50€</b></li>
<li>Tinto <b>1.50€</b></li>
<li>Radler <b>1.50€</b></li>
<li>Cerveza sin alcohol botellín <b>1.30€</b></li>
<li>Litro <b>3.00€</b></li>
<li>Agua pequeña <b>1.00€</b></li>
<li>Agua grande <b>1.50€</b></li>
<li>Zumo <b>1.20€</b></li>
<li>Combinado <b>5.00€</b></li>
</ul>
</details>
<details>
<summary><h3>Helados.</h3></summary>
<ul>
<li>Sandy <b>2.30€</b></li>
<li>Mix Sandy <b>3.30€</b></li>
<li>Mini Mix Sandy <b>2.60€</b></li>
<li>Batido pequeño <b>2.60€</b></li>
<li>Batido grande <b>3.30€</b></li>
</ul>
</details>
<p>¿Quieres ver tu negocio localizado en Burguillos en este espacio? Contacta con <a href="mailto:contact@owlcode.tech">contact@owlcode.tech</a>.</p> <p>¿Quieres ver tu negocio localizado en Burguillos en este espacio? Contacta con <a href="mailto:contact@owlcode.tech">contact@owlcode.tech</a>.</p>
</content> </content>

View File

@ -0,0 +1,40 @@
<post>
<author>Burguillos.info</author>
<date>2023-07-30T13:43:00+00:00</date>
<title>Burguillos.info disponible en la red Tor.</title>
<ogdesc>Burguillos.info disponible en la red Tor.</ogdesc>
<category>index</category>
<img src="/img/tor.webp"/>
<slug>burguillos-info-red-tor</slug>
<content>
<img style="border: 1px black solid;" src="/img/tor.webp" alt="The icon of the Tor Network"/>
<h2>Desplegado Hidden Service para Burguillos.info en Tor.</h2>
<p>Los hidden service de la red Tor son una tecnología realmente prometedora que permiten desplegar páginas web
a internet sin necesidad de tener puertos abiertos en un router o un nombre de dominio comprado, esta red además
de abaratar costes para los desarrolladores provee una privacidad mucho mayor a los usuarios de dichas webs.</p>
<p>Es por ese motivo que desde Burguillos.info nos hemos animado a desplegar un Hidden Service que os permita
aprovechar todas las capacidades de la red Tor también al consultar información sobre nuestro pueblo.</p>
<p>Si os descargáis Tor Browser siguiendo las instrucciones de <a href="https://www.torproject.org/download/">la página oficial del proyecto Tor</a> simplemente apuntando a <a href="https://burguillos.info">https://burguillos.info</a>
os preguntará el navegador si queréis acceder a la versión alternativa sobre Tor.</p>
<p>Si en vuestro camino por Tor no queréis pisar clear net en ningún momento la dirección de Tor es <a href="http://burguic3le5osczqiw3627lazs36e42otfq3xe4rgj4hnbubllzhhbyd.onion//">http://burguic3le5osczqiw3627lazs36e42otfq3xe4rgj4hnbubllzhhbyd.onion/</a>.</p>
<p>Los más espabilados del grupo estareis pensando. ¿No eran las urls http inseguras?</p>
<p>En el caso de los hidden service esto no se cumple ya que la propia red encripta el tráfico desde tú máquina
hasta el hidden service, sin embargo si usais Tor para acceder al internet normal si debéis preocuparos de que
la web se encuentre sobre https para que no puedan espiar vuestro tráfico.</p>
<p>Cabe destacar que Google está intentando imponer en internet un estándar muy dañino de DRM web que impedirá
a la gente poder modificar y crear sus propios navegadores sin ser certificados por Google.</p>
<p>Os ruego a los ciudadanos de Burguillos que os resistais a este estándar y dejéis de usar Chrome.</p>
<p>Un ejemplo de navegador alternativo a Chrome es por supuesto Tor Browser, pero Firefox también es una
gran alternativa y recientemente ha superado de nuevo a Chrome en performance.</p>
</content>
</post>

View File

@ -0,0 +1,70 @@
<post>
<author>Burguillos.info</author>
<date>2023-08-21T13:23+00:00</date>
<last_modification_date>2023-10-01T14:25+00:00</last_modification_date>
<title>Descubre "YoTeLoGuiso" en Burguillos y sus datos de
contacto.</title>
<ogdesc>Descubre "YoTeLoGuiso" en Burguillos y sus datos de
contacto.</ogdesc>
<img src="/img/yo-to-lo-guiso.webp" />
<category>donde-comer</category>
<category>index</category>
<attributes>
<attribute>hamburguesas</attribute>
<attribute>comida-vegana</attribute>
<attribute>reparto-a-domicilio-comida</attribute>
</attributes>
<slug>yo-te-lo-guiso</slug>
<pinned>1</pinned>
<content>
<img witdh="50%" alt="Cartel 'Yo te lo guiso'"
style="border: solid 1px black"
src="/img/yo-to-lo-guiso.webp" />
<p>Con localización en Calle los Palmeros número 32, "Yo te lo
guiso" ofrece una propuesta de catering de comida al peso única
en Burguillos con sus especialidades siempre disponibles y
algunas novedades todos los días.</p>
<p>Podeis hacer encargos para recoger en tienda o envio a domicilio a
Burguillos en este número de teléfono
<a href="tel:+34604424439">604 424 439</a>.</p>
<p>El envio a domicilio tan solo cuesta 1.50€ extra comparado
a comprar en el local.</p>
<p>Recuerda mirar las novedades en Instagram
<a href="https://www.instagram.com/yoteloguiso/">
@yoteloguiso</a>.</p>
<p>El negocio además de su oferta habitual de carne y pescado
ofrece comida <b>vegana</b> y <b>vegetariana</b> siendo de los
pocos negocios en Burguillos
que ofrecen este tipo de servicio. Si quieres disfrutar de este
tipo de comida llamanos con antelación para que te podamos
explicar toda nuestra carta vegana y vegetariana.</p>
<p>Los Jueves son los días del pescado, la oferta de pescado es
mucho mayor esos días. El domingo es el día del arroz.</p>
<p>Especialidades siempre en tienda:</p>
<ul>
<li>Pollo asado.</li>
<li>Pollo relleno.</li>
<li>Verduras asadas.</li>
<li>Empanadas y empanadillas.</li>
<li>Croquetas.</li>
<li>Ensaladas.</li>
<li>Hamburguesas veganas. (Encargar con antelación)</li>
<li>Empanidillas veganas. (Encargar con antelación)</li>
</ul>
<p>Hay una tabla de precios que puedes aplicar para la mayoría
de platos:</p>
<ul>
<li>Verduras:
<b>1.30€/100g</b>.</li>
<li>Carnes: <b>1.30€/100g</b>.</li>
<li>Ensaladilla: <b>1.50€</b>.</li>
<li>Empanadilla: <b>2€/unidad</b>.</li>
<li>Ensalada lista: <b>1.30€/100g</b>.</li>
<li>Paella: <b>1.80€/100g</b>.</li>
<li>Arroz caldoso: <b>1.80€/100g</b>.</li>
</ul>
<p>¿Quieres ver tu negocio localizado en Burguillos en este espacio? Contacta con <a href="mailto:contact@owlcode.tech"> contact@owlcode.tech</a>.</p>
</content>
</post>

View File

@ -0,0 +1,45 @@
<post>
<author>Sergio Iglesias. (Lead Developer)</author>
<date>2023-08-21T15:11:00+00:00</date>
<title>Burguillos.info crece.</title>
<ogdesc>Burguillos.info crece.</ogdesc>
<category>index</category>
<img src="/img/burguillos-front.webp"/>
<slug>burguillos-info-crece</slug>
<content>
<img style="border: 1px black solid;" src="/img/burguillos-new-logo.svg" alt="The icon of Burguillos.info"/>
<p>Cuando creamos esta web en Noviembre de 2022 lo hicimos como un experimento sin ser conscientes del éxito
en el que se convertiría, actualmente estamos recibiendo más de 12 000 peticiones mensuales, creciendo
continuamente y hace poco superamos los 180 clicks en Google en 28 días, el experimento sin duda
se trata de un gran éxito.</p>
<p>Como cabe imaginarse el contenido que más interesa a los lectores de Burguillos.info son las cartas,
menús y datos de contacto de negocios en el sector de la hostelería.</p>
<p>Al darnos cuenta de esto en Burguillos.info decidimos mejorar la experiencia en ese sentido, antiguamente
los negocios de hostelería estaban agrupados junto con el resto de negocios en una sola categoría, "Negocios".</p>
<p>Con la idea de mejorar el SEO y la experiencia de usuario tras un arduo esfuerzo dimos a luz a las subcategorías y atributos,
gracias a ello los usuarios de Burguillos.info pudieron empezar a filtrar según sus intereses, ya sea
un lugar donde comer una hamburguesa, una pizza, recibir la comida a domicilio e incluso hace poco
donde pedir comida vegana. Los clicks a través de Google se dispararon rápidamente.</p>
<p>Rapidamente los negocios empezaron a pedir la posibilidad de tener
un espacio de promoción exclusivo con mayor visibilidad en la web.
Con ese fin nace nuestra nueva funcionalidad publicitaria.</p>
<p>Creemos que la publicidad que os aparecerá os resultará relevante ya que os dará
a conocer un poco más nuestro pueblo, además la publicidad está diseñada de forma
no invasiva, no toma vuestros datos ni dificulta la navegación.</p>
<p>Hemos diseñado la publicidad de tal forma que pueda cambiar según la fecha, hora, día de la semana o incluso
tener varias versiones alternativas que cambien de forma aleatoria para adaptarnos a las necesidades de tu negocio.</p>
<p>¡Anunciarte te da la oportunidad de expandir los horizontes de tu negocio!</p>
<p>Si quieres anunciarte en Burguillos.info no dudes en contactar con <a href="mailto:contact@owlcode.tech">contact@owlcode.tech</a>,
si crees que algún contenido de Burguillos.info está desactualizado o que debería aparecer algún contenido concreto contactanos de igual
modo.</p>
</content>
</post>

View File

@ -0,0 +1,49 @@
<post>
<author>Burguillos.info</author>
<date>2023-08-21T21:15:00+00:00</date>
<title>Venta de boletos de lotería de Navidad de AFASODE Sevilla.</title>
<ogdesc>Venta de boletos de lotería de Navidad de AFASODE Sevilla.</ogdesc>
<category>index</category>
<img src="/img/afasode.svg"/>
<slug>boletos-loteria-afasode-sevilla-2023</slug>
<content>
<img style="border: 1px black solid;" src="/img/afasode.svg" alt="The icon of AFASODE."/>
<p>Es otra vez esa época del año, los pueblos empiezan a iluminarse con las luces navideñas y a
decorarse con árboles de Navidad. Los mercados navideños empiezan a abrir poco a poco aquí
y allá...</p>
<p>¿Qué estamos a medidados de Agosto, hace 40 grados en la calle y no hay quien viva
sin aire acondicionado? Anda, no seas aguafiestas que la Navidad ya ha llegado a AFASODE
Sevilla y ya están repartiendo ilusión con los boletos para la lotería de Navidad
del estado.</p>
<p>Apuntate este número, 54359, porque es el que trae AFASODE Sevilla, cuesta 23€ de los cuales 3€
van dedicados al piso de mayoría de AFASODE Sevilla.</p>
<p>Pero, ¿Qué es eso del piso de mayoría? Os lo explico a continuación.</p>
<p>Tras cumplir los 18 años los usuarios del Servicio de Protección de Menores son puestos en
la calle ese mismo día, en su cumpleaños.</p>
<p>Raro es el joven que a los 18 años tiene una forma de ganarse la vida, los pisos de mayoría
cumplen un rol crucial al evitar que los jovenes que no poseen ninguna familia en la que apoyarse
en España acaben durmiendo en las calles.</p>
<p>AFASODE Sevilla posee uno de esos pisos donde los jovenes pueden estudiar o empezar a introducirse
en el mundo profesional teniendo un punto de apoyo en forma de lugar de residencia, ayuda administrativa,
sustento alimenticio, etc.</p>
<p>Algunas de las plazas en dicho piso se encuentran subvencionadas por la Junta de Andalucía; no obstante
necesitamos tu colaboración económica para otras plazas no cubiertas y para gastos de los jovenes en higiene
y limpieza, transporte, recursos educativos, etc.</p>
<p>Mediante el número que todos los años coge AFASODE Sevilla de Lotería de Navidad se consiguen financiar
algunos de estos gastos, muchos de esos gastos terminan teniendolos que cargar las propias educadoras del
piso aun a pesar del boleto.</p>
<p>Si crees en la ilusión y crees en las oportunidades independientemente de la situación económica y/o familiar
en la que los jovenes hayan tenido el infortunio de nacer asegura tu boleto de AFASODE Sevilla o
realiza una donación Navideña a AFASODE Sevilla si no eres "de esos que compra lotería".</p>
</content>
</post>

View File

@ -0,0 +1,45 @@
<post>
<author>Burguillos.info</author>
<date>2023-08-21T21:15:00+00:00</date>
<title>Nuevas paradas de autobús.</title>
<ogdesc>Nuevas paradas de autobús.</ogdesc>
<category>index</category>
<img src="/img/nuevas-paradas-autobus.webp"/>
<slug>nuevas-paradas-autobus</slug>
<content>
<img style="border: 1px black solid;" src="/img/nuevas-paradas-autobus.webp" alt="Las nuevas paradas de autobús de la Junta donde un tercio del espacio se dedica a un único asiento donde cabe una sola persona, otra tercera parte a una especie de T de uso desconocido y la otra tercera parte queda totalmente desaprovechada."/>
<p>Poco a poco las paradas de autobús tradicionales donde el total del espacio se dedica a un asiento donde la gente puede esperar
al autobús están siendo sustituidas por una versión moderna donde extrañamente se ha decidido dejar de dedicar la totalidad del
espacio a que las personas puedan esperar sentadan, ahora solo un tercio de ese espacio se dispone a ese fin.</p>
<p>¿Qué hacen con los otros 2 tercios del espacio? La respuesta es que es complicado de entender.</p>
<p>En el tercio de en medio se ha dispuesto una suerte de T metálica verde que desde Burguillos.info no podemos si no asumir
que tiene la funcionalidad de que las personas puedan esperar apoyadas en dicho artefacto misterioso.</p>
<p>El último tercio del espacio queda totalmente vacío, sin ningún uso aparente que no sea que las personas esperen ahí de pie
apegotonadas cuando no hayan tenido la suerte de conseguir asiento o espacio para apoyarse en el artefacto con forma de T.</p>
<p>No ha habido ningún tipo de mejora en cuanto a la cantidad de sombra disponible bajo la parada, la que en muchos tramos horarios,
y dependiendo de la localización y meteorología puede convertirse en el inferno en la tierra al quedar descubierta de sombra,
con temperaturas superando los 40 grados no queda si no apiadarse del pobre alma que tenga que tomar el autobús a según que
horas y en según que localizaciones.</p>
<p>El diseño clásico de paredes de cristal también continua en las nuevas paradas, paredes que además de ser frágiles y
ser encontradas rotas frecuentemente poco hacen por detener el poder fulgurante de nuestro Sol andaluz.</p>
<p>Quizás sea solo un detalle más; no obstante creo que la nueva actualización no es más que una muestra más de la
decadencia del transporte público en nuestra localidad con tarifas que crecen como la espuma, horarios que se encogen
como la ropa de algodón a altas temperaturas en la lavadora y usuarios cada día un poco más descontentos.</p>
<p>Aprovecho estas últimas líneas para recordaros que el transporte público tiene una tasa de emisión de gases
con efecto invernadero
muy inferior al vehículo individual ya que la mayor parte de la gasolina se gasta en mover el vehículo, no en mover a la
gente, cuando viajas solo en un coche al trabajo, a la universidad o al médico tu huella en CO2 es muy superior a
cuando lo haces en el transporte público. Destruir el transporte público en lugar de promoverlo y mejorarlo es
un clavo más en el ataud de nuestra especie. Sin transporte público y otras políticas para eliminar la emisión
de gases de efecto invernadero y otras actividades humanas con impacto de efecto invernadero como las estelas de los
aviones nuestro destino absoluto es la extinción.</p>
</content>
</post>

View File

@ -0,0 +1,25 @@
<post>
<author>Sergio Iglesias (Lead Developer.)</author>
<date>2023-09-05T11:02:00+00:00</date>
<title>Mejoras en Burguillos.info.</title>
<ogdesc>Mejoras en Burguillos.info.</ogdesc>
<category>index</category>
<img src="/img/burguillos-front.webp"/>
<slug>mejoras-burguillos-info</slug>
<content>
<img style="border: 1px black solid;" src="/img/burguillos-new-logo.svg" alt=""/>
<p>Desde los albores de Burguillos.info nuestro objetivo ha sido tratar de ofrecer lo mejor a nuestro alcance a nuestros usuarios.</p>
<p>Ha sido una larga travesía y hemos descubierto muchas cosas por el camino que pueden mejorar vuestra experiencia en la página.</p>
<p>Una de las cosas más obvias que tardamos en descubir es que por muy bien que esté estructurada la página a los usuarios nos da vertigo navegar por lo
desconocido buscando lo que queremos.</p>
<p>Es por ello que nos pusimos manos a la obra y creamos un buscador donde ahora sí podéis buscar directamente el nombre de vuestros platos favoritos, restaurantes, tipo de establecimiento y directamente obtener el resultado que buscáis.</p>
<p>Debido a que navegar por internet suele despertar de igual manera ese miedo a lo desconocido hemos creado también una aplicación de Android de Burguillos.info que si usáis Android os saldrá promocionada en la parte superior de la página.</p>
<p>Todo esto con un único objetivo, continuar ofreciendo la mejor experiencia posible a los burguilleros en internet y en nuestra nueva aplicación.</p>
</content>
</post>

View File

@ -0,0 +1,22 @@
<post>
<author>Burguillos.info</author>
<date>2023-09-08T00:26:00+00:00</date>
<title>Código fuente de Burguillos.info.</title>
<ogdesc>Código fuente de Burguillos.info.</ogdesc>
<img src="/img/git.webp"/>
<category>index</category>
<slug>codigo-fuente</slug>
<content>
<img alt="" src="/img/git.webp"/>
<p>Todo el código que soporta Burguillos.info es software libre bajo los terminos de la licencia AGPLv3, en los siguientes enlaces compartimos toda la infraestructura de código que usamos hasta ahora, si tienes alguna duda contacta con <a href="mailto:contact@owlcode.tech">contact@owlcode.tech</a>.</p>
<ul>
<li>Código de la web <a href="https://git.owlcode.tech/sergiotarxz/burguillos.info">https://git.owlcode.tech/sergiotarxz/burguillos.info</a>. Perl/JavaScript/SASS/Webpack/XML/Mojolicious</li>
<li>Código del buscador <a href="https://git.owlcode.tech/sergiotarxz/burguillos.info.search">https://git.owlcode.tech/sergiotarxz/burguillos.info.search</a>. Java/Spring/Lucene</li>
<li>Código de la aplicación de Android <a href="https://git.owlcode.tech/sergiotarxz/BInfoAndroid">https://git.owlcode.tech/sergiotarxz/BInfoAndroid</a>. Gradle/Java</li>
</ul>
<p>Si quieres tener una web como Burguillos.info pero no sabes por donde empezar a implementarla te recomendamos contactar con Owlcode.tech y contratar sus servicios.</p>
</content>
</post>

View File

@ -0,0 +1,43 @@
<post>
<author>Burguillos.info</author>
<date>2023-09-19T06:00+00:00</date>
<title>Meraki - Arte de uñas y belleza.</title>
<ogdesc>Meraki - Arte de uñas y belleza.</ogdesc>
<img src="/img/meraki.webp" bottom-preview="525"/>
<category>estetica</category>
<attributes>
<attribute>belleza-manos</attribute>
</attributes>
<slug>arte-belleza-unas-meraki</slug>
<content>
<img witdh="50%" alt="Cartel de uñas meraki, transcrito en el artículo." style="border: solid 1px black" src="/img/meraki.webp"/>
<h2>Hazte las uñas en Meraki - Nails Art and Beauty.</h2>
<p>Meraki - Nails Art and Beauty localizado en Avenida de Pepe Luna Local 2 con teléfono <a href="tel:+34674021960">674 021 960</a>
es el lugar perfecto para que puedas explotar al máximo la belleza de tus uñas.</p>
<p>Visita su Tiktok <a href="https://www.tiktok.com/@sonialopeznails">@sonialopeznails</a> o su Instagram <a href="https://www.instagram.com/sonialopeznails/">@sonialopeznails</a>
para ver ejemplos de las creaciones de este negocio en cuanto a estética de uñas.</p>
<p>Meraki - Nails Art and Beauty ofrece los siguientes tipos de tratamientos:</p>
<ul>
<li>Uñas acrílicas o esculpidas.</li>
<li>Técnicas nuevas Gelx y Acrigel.</li>
<li>Decoraciones varias.</li>
<li>Manicura rusa semipermanente.</li>
<li>Parafina manos y pies.</li>
<li>Semipermanente con refuerzo.</li>
<li>Pedicura Spa y esmaltado.</li>
<li>Masajes relajantes y anti estrés.</li>
<li>Tratamientos faciales y corporales.</li>
<li>Depilación laser.</li>
<li>Depilación cera.</li>
<li>Microblading.</li>
<li>Extensiones de pestañas.</li>
</ul>
<p>¿Quieres ver tu negocio localizado en Burguillos en este espacio? Contacta con <a href="mailto:contact@owlcode.tech">contact@owlcode.tech</a>.</p>
</content>
</post>

View File

@ -10,7 +10,7 @@
<img alt="" src="/img/burguillos-dental.webp"/> <img alt="" src="/img/burguillos-dental.webp"/>
<h2>Hazte tu aparato dental/ortodoncia invisible en Burguillos Dental.</h2> <h2>Hazte tu aparato dental/ortodoncia invisible en Burguillos Dental.</h2>
<p>Burguillos Dental, ubicado en la <a href="/posts/centro-medico-juan-manuel-perez-sanchez">Clínica Juan Manuel Pérez Sánchez</a> poseé un equipo de odontologos y dentistas altamente cualificados.</p> <p>Burguillos Dental, ubicado en la Clínica Juan Manuel Pérez Sánchez poseé un equipo de odontologos y dentistas altamente cualificados.</p>
<p>Ofrecen los siguientes servicios para el cuidado de tu boca:</p> <p>Ofrecen los siguientes servicios para el cuidado de tu boca:</p>
<ul> <ul>

View File

@ -1,25 +0,0 @@
<post>
<author>Burguillos.info</author>
<date>2025-01-02T18:51+01:00</date>
<title>Hemos añadido nueva publicidad.</title>
<ogdesc>Hemos añadido nueva publicidad.</ogdesc>
<category>index</category>
<slug>nueva-publicidad</slug>
<img src="/img/publicidad.webp" bottom-preview="500"/>
<content>
<h2>Nueva publicidad en Burguillos.info.</h2>
<p>Estamos comprometidos por dar a los ciudadanos de Burguillos el
mejor servicio de información disponible, para poder financiar
mantener este nivel de calidad hemos implementado publicidad
de terceros.</p>
<p>Es importante que tengáis en cuenta que estos anuncios son
automatizados, Burguillos Info no selecciona estos anuncios
manualmente por lo que si veis algún anuncio que no es
apropiado por el motivo que sea haced una captura de pantalla
y enviadnosla para tratar de mejorar la calidad de los mismos.</p>
<p>Para cualquier duda sobre estos anuncios podéis contactarnos en <a href="mailto:contact@owlcode.tech">contact@owlcode.tech</a></p>
</content>
</post>

View File

@ -1,13 +0,0 @@
<product>
<title>Sonny Angel Juguete de Moda</title>
<description>
Sonny Angel es un juguete de moda, consiste en una figura de bebé
que se puede adherir al teléfono móvil u otras superficies.
Regalo perfecto para los más jovenes y los que todavía se sienten jovenes.
</description>
<slug>sonny-angel</slug>
<img>/img/sonny-angel.webp</img>
<vendor>Amazon</vendor>
<url>https://amzn.to/40c2Y8W</url>
</product>

View File

@ -1,11 +0,0 @@
<product>
<title>Mesa escritorio elegante Yaheetech</title>
<description>
Mesa de escritorio para trabajo y gaming serio con multitud de complementos
para hacer el tiempo en el ordenador mucho más cómodo y ergonómico.
</description>
<slug>yaheetech-mesa-escritorio</slug>
<img>/img/mesa-escritorio-yaheetech.webp</img>
<vendor>Amazon</vendor>
<url>https://amzn.to/405wlJN</url>
</product>

View File

@ -1,11 +0,0 @@
<product>
<title>Libro programación de Kernel Linux</title>
<description>
Libro en inglés para aprender a programar el Kernel de Linux, útil para
desarrollo de sistemas embebidos, hacking, programación de drivers...
</description>
<slug>packt-linux-kernel-programming</slug>
<img>/img/linux-kernel-libro.webp</img>
<vendor>Amazon</vendor>
<url>https://amzn.to/3DIdSf3</url>
</product>

View File

@ -1,11 +0,0 @@
<product>
<title>Figura San Cristóbal</title>
<description>
Figura de 20 centimetros de San Cristóbal patrón de los viajeros,
muestra tu devocion por el santo con esta figura.
</description>
<slug>figura-san-cristobal</slug>
<img>/img/figura-san-cristobal.webp</img>
<vendor>Amazon</vendor>
<url>https://amzn.to/404uAwv</url>
</product>

View File

@ -1,41 +0,0 @@
<product>
<title>Modem USB 4G HMUF-V5</title>
<description>
<h3>¡¡¡¡IMPORTANTE ESCOGER COLOR "WHITE RED 1PC"!!!!</h3>
<p>Te permite dar internet en cualquier sitio a través de
usb a tu ordenador con una tarjeta SIM extra que puedes pedir
en tu operadora usando un plan Multisim usando los datos
de tu tarifa con la ventaja de no gastar batería del
movil en esta tarea.</p>
<p>También puede proveer de internet a través de wifi
a dispositivos cercanos como móviles u otros ordenadores.</p>
<p>Es muy importante que al usarlo cambies la clave por defecto
del wifi; o incluso que lo desactives si no lo necesitas.</p>
<p>Para ello deberás conectarte con tu navegador a http://192.168.100.1
una vez tengas el modem conectado por usb a tu ordenador para cambiar
los ajustes con el usuario admin y la contraseña admin.</p>
<p>Este modelo contiene un ordenador completo en su interior
al que se le puede instalar un sistema operativo alternativo;
no obstante no recomiendo comprarlo para ese proposito ya
que el proceso no está documentado ni soportado en internet.</p>
<p>Bajo ningún concepto desactives la opción de usb tethering,
no podrás reconfigurar el modem y el vendedor no te ayudará a
resolver el problema. (Es solucionable, pero no por usuarios
sin conocimientos del uso del terminal)</p>
<p>Si has comprado este producto a través de nuestro enlace, vives
en Burguillos y se te estropea puedes contactar con
burguillos.info en Instagram e intentaremos hacer lo
posible por ayudarte si el vendedor no responde.</p>
</description>
<slug>modem-4g-usb-hmuf-v5</slug>
<img>/img/hmuf-v5.webp</img>
<vendor>Aliexpress</vendor>
<url>https://s.click.aliexpress.com/e/_okTlQcF</url>
</product>

View File

@ -1,13 +0,0 @@
<product>
<title>Martillo rompe vidrio para emergencias</title>
<description>
<p>No te arriesgues a quedarte atrapado en un coche
o autobús en caso de una emergencia, este martillo de
seguridad es capaz de hacer añicos el cristal para
permitirte escapar del apuro.</p>
</description>
<slug>martillo-seguridad-rompe-vidrio</slug>
<img>/img/martillo-seguridad.webp</img>
<vendor>Aliexpress</vendor>
<url>https://s.click.aliexpress.com/e/_opjd8sj</url>
</product>

View File

@ -1,14 +0,0 @@
<product>
<title>Horno pizza aire libre</title>
<description>
<p>Disfruta de la pizza también en tus visitas a
la Madroña o acampadas.</p>
<p>Respeta la legislación contra incedios forestales,
en todo momento cuando uses este producto.</p>
</description>
<slug>pizza-horno-acampada</slug>
<img>/img/pizza-horno.webp</img>
<vendor>Aliexpress</vendor>
<url>https://s.click.aliexpress.com/e/_onS208j</url>
</product>

View File

@ -1,28 +0,0 @@
<product>
<title>Pantalla con microcontrolador ESP32</title>
<description>
<h3>¡IMPORTANTE COMPRAR COLOR "2.2 Capacitive touch"!</h3>
<p>Esta pantalla capacitiva hackeable lleva dentro
a la bestia de los desarrollos embebidos sobre microcontrolador,
la ESP32.</p>
<p>Tiene soporte para añadirle una tarjeta sd para poder almacenar
datos de tu aplicación.</p>
<p>Tenemos una en Burguillos Info por lo que cualquier duda sobre
como programarla nos la puedes preguntar en nuestro instagram:
"burguillos.info" si la has comprado en nuestro enlace de promoción.</p>
<p>Se puede programar muy fácilmente desde Linux en C con cualquier
editor de texto o IDE usando el framework ESPIDF.</p>
<p>Incluye bluetooth y wifi por lo que puede convertirse
en el punto de control táctil de tús aplicaciones embebidas.</p>
<p>Muy similar a Cheap Yellow Display.</p>
</description>
<slug>cyd-capacitiva-esp32</slug>
<img>/img/cyd-esp32-capacitiva.webp</img>
<vendor>Aliexpress</vendor>
<url>https://s.click.aliexpress.com/e/_om78LIZ</url>
</product>

View File

@ -1,80 +0,0 @@
<product>
<title>Dispositivo Hacking Modem USB 4G uz801</title>
<description>
<h3>¡¡¡¡IMPORTANTE ESCOGER COLOR "B"!!!!</h3>
<p>(!!!) Si no tienes conocimientos de informática avanzados
ni ganas de aprender compra
<a href="/producto/modem-4g-usb-hmuf-v5">hmuf-v5</a> que
tiene todo lo que debería tener un modem por defecto en
su lugar, debido a que este aparato aun teniendo mucho
mejor soporte en Linux para hacer lo que quieras
está muy limitado con el software que viene por defecto
y requiere hackearlo para poder empezar a hacer cosas chulas
con él.</p>
<p>Este modem 4g con soporte de tarjeta SIM, USB host mode, wifi y gps
con 512MB de RAM y aproximadamente 3GB útiles de espacio para
almacenar el software que quieras usar/crear para el dispositivo
es uno de los aparatos más interesantes hackeables que he
encontrado nunca, debido a su función original como modem
puede funcionar con muy poca electricidad, con lo que da
un puerto usb de un ordenador funciona al 100% de su capacidad,
por lo que puedes enchufarlo a un powerbank y que esté funcionando
muchísimo tiempo.</p>
<p>Su soporte de USB host mode significa que puede simular pulsaciones
de teclado y ratón, proveer una red alternativa a un ordenador e
infinidad de usos más.</p>
<p>Es un aparato ideal tanto para pentesting como para desarrollo
de soluciones embebidas como control de sistemas automáticos
en lugares sin conexión a internet como los campos de nuestro
pueblo.</p>
<p>Su soporte de GPS implica que podrás usarlo para vigilar
la localización de tus pertencias.</p>
<p>Por defecto viene con Android, pero Postmarketos, un Linux
para dispositivos embebidos tiene soporte del 100% para
este aparato lo que te permitirá tener acceso a infinidad
de programas de software libre para llevar a cabo cualquier
uso alternativo al para el que se diseñó.</p>
<p>Es probable que para entrar en EDL tengas que hacer short
de un cable USB de D+ con - para forzar EDL, asegurate de estar dispuesto
a hacer eso antes de comprar.</p>
<p>Antes de comprar, por favor lee
<a href="https://wiki.postmarketos.org/wiki/Zhihe_series_LTE_dongles_(generic-zhihe)">
el artículo de la wiki de
Postmarketos</a> sobre este dispositivo para asegurarte 100%
de que encaja con tus capacidades de informática.</p>
<p>Si usas Linux, compras el producto por nuestro enlace y quieres
empezar a hackear este producto para hacer realidad tu proyecto,
por favor contactanos antes de manipular el software
para que podamos ayudarte a hacer un backup del software
original, este paso es muy importante y muy fácil de
hacer mal. En caso de error sin un backup completo
el dispositivo quedará inutilizable y el fabricante
no te dará un software nuevo. (Que además es único
por dispositivo por ejemplo para los drivers de wifi
y el IMEI.)</p>
<p>Tú no quieres tirar más de 10€ a la basura y nosotros no queremos
que quedes descontento con nuestra recomendación, así
pues contactanos, yo ya he tirado esos 10€ a la basura antes
para que tú no lo tengas que hacer por realizar mal el
backup.</p>
<p>Si has comprado este producto a través de nuestro enlace, vives
en Burguillos y se te estropea puedes contactar con
burguillos.info en Instagram e intentaremos hacer lo
posible por ayudarte si el vendedor no responde.</p>
</description>
<slug>modem-4g-usb-uz801</slug>
<img>/img/uz801.webp</img>
<vendor>Aliexpress</vendor>
<url>https://s.click.aliexpress.com/e/_onzxQ1b</url>
</product>

View File

@ -1,23 +0,0 @@
<product>
<title>Tarjeta Homebrew Ez Flash Omega Definitive</title>
<description>
<p>La mejor tarjeta de homebrew y backups para Game Boy Advance, provee de un modo para simular
ser un cartucho de Game Boy Normal por lo que podrás usar el parque compi para interactuar
con los juegos de Pokémon de Nintendo DS.</p>
<p>Perfecta para introducirte en el hacking de GBA y empezar a crear tus propios juegos
para Game Boy Advance o modificar juegos ya existentes comprobando que funcionan en
hardware oficial.</p>
<p>Puedes usar tus partidas de tus juegos originales en este cartucho, si necesitas ayuda para hacer
un backup de un juego y su partida; y has comprado el producto por nuestro enlace contactanos
a nuestro instagram "burguillos.info" y te ayudaremos a sacarle el máximo potencial
a tu cartucho.</p>
<p>Además puedes pedirnos recursos para programar juegos y hackroms para tu Game Boy Advance.</p>
</description>
<slug>ez-flash-omega-definitive</slug>
<img>/img/ezflash.webp</img>
<vendor>Aliexpress</vendor>
<url>https://s.click.aliexpress.com/e/_okbOIch</url>
</product>

View File

@ -1,30 +0,0 @@
<product>
<title>Libro Postgresql, Programa, Administra, Construye.</title>
<description>
<p>Libro en inglés para aprender a programar y administrar bases
de datos Postgresql, el mejor motor de bases de datos
de software libre.</p>
<p>Tus inventos de hacking necesitan una forma eficiente de
almacenar información, una correcta admistración y optimización
de las bases de datos es una de las formas más sencillas de
aumentar el rendimiento y sacarle el máximo provecho a
tu aplicación.</p>
<p>También es útil para pentesting ya que la base de datos
es el tesoro más preciado de las empresas y descubrir los
errores de seguridad que afectan a las bases de datos es
altamente valorado por las empresas y equipos IT.</p>
<p>Consigue un buen trabajo como DBA securizando bases de datos,
aumentando su rendimiento y manteniendo la integridad
de la información.</p>
<p>Libro excepcional que podrás releer muchas veces descubriendo
cada vez trucos nuevos.</p>
</description>
<slug>packt-learn-postgresql</slug>
<img>/img/learn-postgresql.webp</img>
<vendor>Amazon</vendor>
<url>https://amzn.to/4fOU5YA</url>
</product>

@ -1 +0,0 @@
Subproject commit ae2bd63d8fbf93b8bb2a2fa9cc16405a16d0223d

View File

@ -1,58 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="512"
height="512"
viewBox="0 0 512 512"
version="1.1"
id="svg1"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
sodipodi:docname="copy-to-clipboard.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
inkscape:zoom="0.89453125"
inkscape:cx="245.93886"
inkscape:cy="348.22707"
inkscape:window-width="1920"
inkscape:window-height="1003"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="fill:#ffffff;stroke:#060600;stroke-width:14.3043;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:6.7;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
id="rect2-5"
width="371.28802"
height="396.17642"
x="7.1521826"
y="7.1521826"
ry="38.807285" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#060600;stroke-width:14.3043;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:6.7;stroke-dasharray:none;stroke-opacity:1"
id="rect2"
width="371.28802"
height="396.17642"
x="133.5598"
y="108.67142"
ry="38.807285" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -1,357 +1,170 @@
"use strict"; "use strict";
import Tablesort from "tablesort"; import Tablesort from 'tablesort';
import CarouselAd from "@burguillosinfo/carousel-ad"; import CarouselAd from '@burguillosinfo/carousel-ad'
window.Tablesort = require("tablesort"); window.Tablesort = require('tablesort');
require('tablesort/src/sorts/tablesort.number');
require("tablesort/src/sorts/tablesort.number"); let fakeSearchInput
let searchMobile
document.addEventListener("DOMContentLoaded", function () {
const menu_expand = document.querySelector('a.menu-expand');
const mobile_foldable = document.querySelector('nav.mobile-foldable');
const transparentFullscreenHide = document.querySelector('div.transparent-fullscreen-hide');
const contentsWithoutMenu = document.querySelector('div.contents-without-menu')
const tables = document.querySelectorAll('table')
let fakeSearchInput;
let searchMobile;
const cookies = document.cookie
.split("; ")
.map((cookie) => {
let [key, value] = cookie.split("=");
return {
key: key,
value: value,
};
})
.reduce((acc, cookie) => {
acc[cookie.key] = cookie.value;
return acc;
}, {});
function addEventListernerExpandDescriptionProducts() {
const searchResults = document.querySelectorAll("div.search-result");
for (const result of searchResults) {
const a = result.querySelector("div.row-title-url-image a");
if (a === null) {
continue;
}
if (!a.href) {
continue;
}
const askUrl = a.href + ".json";
const content = result.querySelector("div.search-result-content");
const expand = result.querySelector("div.search-result-content a.expand");
if (expand === null) {
continue;
}
expand.addEventListener("click", (event) => {
event.preventDefault();
fetch(askUrl).then(async (res) => {
const json = await res.json();
content.innerHTML = json.description;
});
});
}
}
function startSuggestions() {
const searchInputs = document.querySelectorAll("div.fake-text-box input");
const port = _port();
const url = new URL(
window.location.protocol +
"//" +
window.location.hostname +
port +
"/search/suggestions.json",
);
fetch(url).then(async (res) => {
let suggestions = await res.json();
let selectedSuggestion;
let currentLength = 0;
let waitCounter;
const last3SearchSuggestions = [];
window.setInterval(() => {
if (--waitCounter > 0) {
return;
}
if (!selectedSuggestion || currentLength > selectedSuggestion.length) {
selectedSuggestion =
suggestions[Math.floor(Math.random() * suggestions.length)];
currentLength = 0;
while (last3SearchSuggestions.includes(selectedSuggestion)) {
selectedSuggestion =
suggestions[Math.floor(Math.random() * suggestions.length)];
currentLength = 0;
}
last3SearchSuggestions.push(selectedSuggestion);
if (last3SearchSuggestions.length > 2) {
last3SearchSuggestions.shift();
}
waitCounter = 5;
return;
}
currentLength++;
for (const input of searchInputs) {
input.setAttribute(
"placeholder",
selectedSuggestion.substring(0, currentLength),
);
}
}, 100);
});
}
document.addEventListener(
"DOMContentLoaded",
function () {
window.addEventListener("popstate", (event) => {
if (event) {
console.log("refreshing");
window.location.reload();
}
});
startSuggestions();
addEventListernerExpandDescriptionProducts();
let focusSearch = document.body.querySelector(
"nav.mobile-shortcuts div.search input",
);
if (focusSearch === null) {
focusSearch = document.body.querySelector("div.search input");
}
if (focusSearch !== null) {
focusSearch.focus();
}
const menu_expand = document.querySelector("a.menu-expand");
const mobile_foldable = document.querySelector("nav.mobile-foldable");
const transparentFullscreenHide = document.querySelector(
"div.transparent-fullscreen-hide",
);
const contentsWithoutMenu = document.querySelector(
"div.contents-without-menu",
);
const tables = document.querySelectorAll("table");
const searchTooltips = document.querySelectorAll(
"div.tooltip-search-promo",
);
for (const searchTooltip of searchTooltips) {
const cookie_name = "seen-tooltip-this-week";
if (cookies[cookie_name]) {
searchTooltip.classList.add("hidden");
}
searchTooltip.addEventListener("click", () => {
let time = 86400 * 7;
document.cookie = `${cookie_name}=1; max-age=${time}; path=/;`;
for (const searchTooltip of searchTooltips) {
searchTooltip.classList.add("hidden");
}
});
}
fillFarmaciaGuardia(); fillFarmaciaGuardia();
// new CarouselAd().run() new CarouselAd().run()
addEasterEggAnimation(); addEasterEggAnimation()
if ( if (menu_expand !== null && mobile_foldable !== null && transparentFullscreenHide !== null && contentsWithoutMenu !== null) {
menu_expand !== null && mobile_foldable.toggleAttribute('aria-hidden')
mobile_foldable !== null && if (mobile_foldable.getAttribute('aria-hidden') !== null) {
transparentFullscreenHide !== null && mobile_foldable.setAttribute('aria-hidden', true);
contentsWithoutMenu !== null
) {
mobile_foldable.toggleAttribute("aria-hidden");
if (mobile_foldable.getAttribute("aria-hidden") !== null) {
mobile_foldable.setAttribute("aria-hidden", true);
} }
transparentFullscreenHide.addEventListener("click", () => { transparentFullscreenHide.addEventListener('click', () => {
mobile_foldable.classList.remove("show"); mobile_foldable.classList.remove('show');
transparentFullscreenHide.classList.remove("show"); transparentFullscreenHide.classList.remove('show');
menu_expand.classList.remove("active"); menu_expand.classList.remove('active');
contentsWithoutMenu.removeAttribute("aria-hidden"); contentsWithoutMenu.removeAttribute('aria-hidden')
mobile_foldable.setAttribute("aria-hidden", true); mobile_foldable.setAttribute('aria-hidden', true)
}); });
menu_expand.addEventListener("click", () => { menu_expand.addEventListener('click', () => {
menu_expand.classList.toggle("active"); menu_expand.classList.toggle('active');
mobile_foldable.classList.toggle("show"); mobile_foldable.classList.toggle('show');
transparentFullscreenHide.classList.toggle("show"); transparentFullscreenHide.classList.toggle('show');
contentsWithoutMenu.toggleAttribute("aria-hidden"); contentsWithoutMenu.toggleAttribute('aria-hidden')
if (contentsWithoutMenu.getAttribute("aria-hidden") !== null) { if (contentsWithoutMenu.getAttribute('aria-hidden') !== null) {
contentsWithoutMenu.setAttribute("aria-hidden", true); contentsWithoutMenu.setAttribute('aria-hidden', true);
} }
mobile_foldable.toggleAttribute("aria-hidden"); mobile_foldable.toggleAttribute('aria-hidden')
if (mobile_foldable.getAttribute("aria-hidden") !== null) { if (mobile_foldable.getAttribute('aria-hidden') !== null) {
mobile_foldable.setAttribute("aria-hidden", true); mobile_foldable.setAttribute('aria-hidden', true);
} }
}); });
} }
for (const table of tables) { for (const table of tables) {
const header = table.querySelector("tr"); const header = table.querySelector('tr');
if (header !== null) { if (header !== null) {
header.setAttribute("data-sort-method", "none"); header.setAttribute('data-sort-method', 'none')
for (const th of header.querySelectorAll("th")) { for (const th of header.querySelectorAll('th')) {
if (th.getAttribute("data-sort-method") == null) { if (th.getAttribute('data-sort-method') == null) {
th.setAttribute("data-sort-method", "thead"); th.setAttribute('data-sort-method', 'thead')
} }
} }
} }
new Tablesort(table); new Tablesort(table)
} }
if (window !== undefined && window.Android !== undefined) { if (window !== undefined && window.Android !== undefined) {
executeAndroidAppExclusiveCode(Android); executeAndroidExclusiveCode(Android)
} }
searchMobile = document.querySelector("nav.mobile-shortcuts div.search"); searchMobile = document.querySelector('nav.mobile-shortcuts div.search')
if (searchMobile !== null) { if (searchMobile !== null) {
fakeSearchInput = searchMobile.querySelector("input"); fakeSearchInput = searchMobile.querySelector('input')
addListenersSearch(); addListenersSearch()
} }
addListenersSearchOverlay(); }, false);
if (!cookies["search-tutorial-seen"]) {
startSearchTutorial();
}
},
false,
);
function startSearchTutorial() {
console.log("Showing how to use search");
const tutorialOverlay = document.querySelector(".tutorial-overlay-step-1");
if (tutorialOverlay === null) {
console.error("tutorialOverlay missing");
return;
}
// tutorialOverlay.classList.remove('hidden');
}
function markSearchTutorialAsSeen() {
console.log("Tutorial ended");
document.cookie = "search-tutorial-seen=1; SameSite=Lax;";
}
function fillFarmaciaGuardia() { function fillFarmaciaGuardia() {
const farmaciaName = document.querySelector("#farmacia-name"); const farmaciaName = document.querySelector('#farmacia-name');
const farmaciaAddress = document.querySelector("#farmacia-address"); const farmaciaAddress = document.querySelector('#farmacia-address');
if (farmaciaName !== null || farmaciaAddress !== null) { if (farmaciaName !== null || farmaciaAddress !== null) {
const port = _port(); const port = _port()
const url = new URL( const url = new URL(window.location.protocol
window.location.protocol + + "//"
"//" + + window.location.hostname
window.location.hostname + + port
port + + '/farmacia-guardia.json');
"/farmacia-guardia.json",
);
fetch(url).then(async (res) => { fetch(url).then(async (res) => {
const farmacia = await res.json(); const farmacia = await res.json()
if (farmaciaName !== null) { if (farmaciaName !== null) {
farmaciaName.innerText = farmacia.name; farmaciaName.innerText = farmacia.name;
farmaciaAddress.innerText = farmacia.address; farmaciaAddress.innerText = farmacia.address;
} }
}); })
} }
} }
function addListenersSearch() { function addListenersSearch() {
const searchInPage = document.querySelector("div.search-in-page"); const searchInPage = document.querySelector('div.search-in-page')
if (searchMobile !== null) { if (searchMobile !== null) {
const searchIcon = searchMobile.querySelector("a.search-icon"); const searchIcon = searchMobile.querySelector('a.search-icon')
searchIcon.addEventListener("click", (e) => { searchIcon.addEventListener('click', (e) => {
const searchOverlay = document.querySelector("div.search-overlay"); const searchOverlay = document.querySelector('div.search-overlay');
const searchInput = searchOverlay.querySelector("div.search input"); const searchInput = searchOverlay.querySelector('div.search input');
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: "fakesearch_term",
term: fakeSearchInput.value,
});
searchInput.value = fakeSearchInput.value; searchInput.value = fakeSearchInput.value;
onSearchChange(e); onSearchChange(e)
onFakeSearchClick(e); onFakeSearchClick(e)
return true; return true;
});
fakeSearchInput.addEventListener("keyup", (e) => { })
fakeSearchInput.addEventListener('keyup', (e) => {
if (searchInPage === null) { if (searchInPage === null) {
return; return;
} }
if (fakeSearchInput.value === "") { if (fakeSearchInput.value === "") {
searchInPage.classList.remove("active"); searchInPage.classList.remove('active')
} else { } else {
searchInPage.classList.add("active"); searchInPage.classList.add('active')
} }
if (e.keyCode !== 13) { if (e.keyCode !== 13) {
return false; return false;
} }
const searchOverlay = document.querySelector("div.search-overlay"); const searchOverlay = document.querySelector('div.search-overlay');
const searchInput = searchOverlay.querySelector("div.search input"); const searchInput = searchOverlay.querySelector('div.search input');
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: "fakesearch_term_keyup",
term: fakeSearchInput.value,
});
searchInput.value = fakeSearchInput.value; searchInput.value = fakeSearchInput.value;
onSearchChange(e); onSearchChange(e)
onFakeSearchClick(e); onFakeSearchClick(e)
return true; return true;
}); });
} }
const nextResult = searchInPage.querySelector("a.down"); const nextResult = searchInPage.querySelector('a.down');
const prevResult = searchInPage.querySelector("a.up"); const prevResult = searchInPage.querySelector('a.up');
window.addEventListener("keydown", (e) => {
if (e.key.toLowerCase() === "f" && e.ctrlKey) {
openAllDetails();
}
});
window.addEventListener("blur", (e) => {
openAllDetails();
});
if (nextResult !== null && prevResult !== null) { if (nextResult !== null && prevResult !== null) {
nextResult.addEventListener("click", () => { nextResult.addEventListener('click', () => {
searchInWebsite(fakeSearchInput.value, true); searchInWebsite(fakeSearchInput.value, true);
}); });
prevResult.addEventListener("click", () => { prevResult.addEventListener('click', () => {
searchInWebsite(fakeSearchInput.value, false); searchInWebsite(fakeSearchInput.value, false);
}); });
} }
const exitSearch = document.querySelector("a.exit-search"); const exitSearch = document.querySelector('a.exit-search')
const searchOverlay = document.querySelector("div.search-overlay"); const searchOverlay = document.querySelector('div.search-overlay');
const searchInput = searchOverlay.querySelector("div.search input"); const searchInput = searchOverlay.querySelector('div.search input');
fakeSearchInput.value = searchInput.value; fakeSearchInput.value = searchInput.value;
const firstUrl = window.location.href; exitSearch.addEventListener('click', onExitSearch)
if (exitSearch !== null) { const search = document.querySelector('div.search-overlay div.search input');
exitSearch.addEventListener("click", (event) => {
onExitSearch(event, firstUrl);
});
}
const searchIconDesktop = document.querySelector("nav.desktop a.search-icon");
if (searchIconDesktop !== null) {
searchIconDesktop.addEventListener("click", (e) => {
onFakeSearchClick(e);
});
}
}
function addListenersSearchOverlay() {
const search = document.querySelector("div.search-overlay div.search input");
if (search !== null) { if (search !== null) {
search.addEventListener("change", onSearchChange); search.addEventListener('change', onSearchChange);
}
const searchIconDesktop = document.querySelector('nav.desktop a.search-icon');
if (searchIconDesktop !== null) {
searchIconDesktop.addEventListener('click', (e) => {
onFakeSearchClick(e)
})
} }
} }
function searchInWebsite(value, isToBottom) { function searchInWebsite(value, isToBottom) {
window.find(value, false, !isToBottom, true); window.find(value, false, !isToBottom, true)
const selection = window.getSelection(); const selection = window.getSelection()
openAllDetails();
if (selection.anchorNode === null) { if (selection.anchorNode === null) {
const pageContents = document.querySelector("div.page-contents"); const pageContents = document.querySelector('div.page-contents');
pageContents.focus(); pageContents.focus()
searchInWebsite(value, isToBottom); searchInWebsite(value, isToBottom)
} }
const anchorNode = selection.anchorNode.parentNode; const anchorNode = selection.anchorNode.parentNode
if (anchorNode.tagName !== null && anchorNode.tagName === "INPUT") { if (anchorNode.tagName !== null
const pageContents = document.querySelector("div.page-contents"); && anchorNode.tagName === "INPUT") {
pageContents.focus(); const pageContents = document.querySelector('div.page-contents');
searchInWebsite(value, isToBottom); pageContents.focus()
searchInWebsite(value, isToBottom)
} }
if (anchorNode !== null) { if (anchorNode !== null) {
const pageContents = document.querySelector("div.page-contents"); const pageContents = document.querySelector('div.page-contents');
const offsetTop = _getOffsetTopWithNParent(anchorNode, pageContents); const offsetTop = _getOffsetTopWithNParent(anchorNode, pageContents);
pageContents.scroll(0, offsetTop - 150); pageContents.scroll(0, offsetTop - 150)
}
}
function openAllDetails() {
for (const detail of document.querySelectorAll("details")) {
detail.open = true;
} }
} }
@ -362,170 +175,171 @@ function _getOffsetTopWithNParent(element, nParent, _carry = 0) {
if (element === nParent) { if (element === nParent) {
return _carry; return _carry;
} }
_carry += element.offsetTop; _carry += element.offsetTop
return _getOffsetTopWithNParent(element.offsetParent, nParent, _carry); return _getOffsetTopWithNParent(element.offsetParent, nParent, _carry)
} }
function _port() { function _port() {
let port = window.location.port; let port = window.location.port;
if (port !== "") { if (port !== '') {
port = ":" + port; port = ':' + port
} }
return port; return port;
} }
function onSearchChange() { function onSearchChange() {
const search = document.querySelector("div.search-overlay div.search input"); const search = document.querySelector('div.search-overlay div.search input');
const searchResults = document.querySelector( const searchResults = document.querySelector('div.search-overlay div.search-results');
"div.search-overlay div.search-results",
);
if (search === null || searchResults === null) { if (search === null || searchResults === null) {
return; return;
} }
const query = search.value; const query = search.value;
window.dataLayer = window.dataLayer || []; fakeSearchInput.value = search.value
window.dataLayer.push({ const port = _port()
event: "realsearch_term_keyup", const url = new URL(window.location.protocol
term: search.value, + "//"
}); + window.location.hostname
if (fakeSearchInput !== undefined && fakeSearchInput !== null) { + port
fakeSearchInput.value = search.value; + '/search.json');
url.searchParams.set('q', query);
fetch(url).then(async (res) => {
const json = await res.json()
if (!json.ok) {
noResults(searchResults);
return
} }
let found = search.value.match(/^#(\S+?)(?:\:(\S+?))?$/); console.log(json.searchObjects.length)
const port = _port(); if (json.searchObjects.length < 1) {
if (found) { noResults(searchResults);
let attributeUrlPart = found[2];
console.log(attributeUrlPart);
if (attributeUrlPart === undefined) {
attributeUrlPart = "";
}
console.log(attributeUrlPart);
if (attributeUrlPart !== "") {
attributeUrlPart = "/atributo/" + attributeUrlPart;
}
console.log(attributeUrlPart);
const checkHashstagUrl = new URL(
window.location.protocol +
"//" +
window.location.hostname +
port +
"/" +
found[1] +
attributeUrlPart,
);
fetch(checkHashstagUrl).then((res) => {
if (res.status === 200) {
window.location = checkHashstagUrl;
}
});
return; return;
} }
const url = new URL( showResults(searchResults, json.searchObjects);
window.location.protocol + })
"//" + search.focus()
window.location.hostname +
port +
"/search.html",
);
url.searchParams.set("q", query);
url.searchParams.set("e", 1);
fetch(url).then(async (res) => {
const url = new URL(
window.location.protocol +
"//" +
window.location.hostname +
port +
"/search.html",
);
url.searchParams.set("q", query);
document.title = `'${query}' en Burguillos Info`;
if (!query) {
document.title = `Buscador de Burguillos Info`;
}
history.pushState({}, "", url);
searchResults.innerHTML = await res.text();
addEventListernerExpandDescriptionProducts();
searchResults.scrollTo(0, 0);
});
search.focus();
} }
function onExitSearch(event, firstUrl) { function showResults(searchResults, searchObjects) {
event.preventDefault(); searchResults.innerHTML = "";
const searchOverlay = document.querySelector("div.search-overlay"); for (let searchObject of searchObjects) {
if (searchOverlay !== null) { const searchResultContainer = document.createElement('div')
searchOverlay.classList.toggle("active"); searchResultContainer.classList.add('search-result')
const rowTitleUrlImageDiv = document.createElement('div');
rowTitleUrlImageDiv.classList.add('row-title-url-image');
const columnTitleUrl = document.createElement('div');
columnTitleUrl.classList.add('column-title-url');
const img = document.createElement('img')
const title = document.createElement('b')
const url = document.createElement('a')
const content = document.createElement('p')
title.innerText = searchObject.title
let port = window.location.port;
if (port !== '') {
port = ':' + port
} }
if (!searchOverlay.classList.contains("active")) { if (searchObject.url.match(/^\//)) {
history.pushState({}, "", firstUrl); searchObject.url = window.location.protocol
+ "//" + window.location.hostname
+ port
+ searchObject.url
}
let urlImage = searchObject.urlImage;
if (urlImage !== null && urlImage.match(/^\//)) {
urlImage = window.location.protocol
+ "//" + window.location.hostname
+ port
+ urlImage
}
if (urlImage !== null) {
img.alt = ""
img.src = urlImage
}
url.href = searchObject.url
url.innerText = searchObject.url
content.innerText = searchObject.content
if (urlImage !== null) {
rowTitleUrlImageDiv.appendChild(img)
}
columnTitleUrl.appendChild(title);
columnTitleUrl.appendChild(document.createElement('br'))
columnTitleUrl.appendChild(url)
rowTitleUrlImageDiv.appendChild(columnTitleUrl)
searchResultContainer.appendChild(rowTitleUrlImageDiv)
searchResultContainer.appendChild(content)
searchResults.appendChild(searchResultContainer)
}
}
function noResults(searchResults) {
searchResults.innerHTML = ""
const p = document.createElement('p')
p.innerText = 'No se han encontrado resultados.'
searchResults.appendChild(p)
}
function onExitSearch() {
const searchOverlay = document.querySelector('div.search-overlay');
if (searchOverlay !== null) {
searchOverlay.classList.toggle('active');
} }
} }
function onFakeSearchClick(e) { function onFakeSearchClick(e) {
e.preventDefault(); e.preventDefault();
const searchOverlay = document.querySelector("div.search-overlay"); const searchOverlay = document.querySelector('div.search-overlay');
if (searchOverlay === null) { if (searchOverlay === null) {
return; return
} }
searchOverlay.classList.toggle("active"); searchOverlay.classList.toggle('active');
const search = searchOverlay.querySelector("div.search input"); const search = searchOverlay.querySelector('div.search input');
if (search !== null) { if (search !== null) {
search.focus(); search.focus()
} }
return false; return false;
} }
function absoluteToHost(imageUrl) { function absoluteToHost(imageUrl) {
if (imageUrl.match(/^\//)) { if (imageUrl.match(/^\//)) {
imageUrl = imageUrl = window.location.protocol + "//" + window.location.host + imageUrl
window.location.protocol + "//" + window.location.host + imageUrl;
} }
return imageUrl.replace(/\?.*$/, ""); return imageUrl.replace(/\?.*$/, '');
} }
function addListenerOpenInBrowserButton(android) { function addListenerOpenInBrowserButton(android) {
const openInBrowserLink = document.querySelector("a.open-in-browser"); const openInBrowserLink = document.querySelector('a.open-in-browser')
if (openInBrowserLink === null) { if (openInBrowserLink === null) {
return; return
} }
openInBrowserLink.addEventListener("click", () => { openInBrowserLink.addEventListener('click', () => {
android.openInBrowser(window.location.href); android.openInBrowser(window.location.href)
}); })
} }
function executeAndroidAppExclusiveCode(android) { function executeAndroidExclusiveCode(android) {
const port = _port(); document.querySelectorAll('*.android').forEach((element) => {
const url = new URL( element.classList.remove('android')
window.location.protocol + })
"//" + document.querySelectorAll('*.no-android-app').forEach((element) => {
window.location.hostname + element.style.display = 'none';
port + })
"/ping/i-am-android-app", addListenerOpenInBrowserButton(android)
); const pinToHomeUrl = document.querySelector('a.pin-to-home')
fetch(url).then((res) => {
console.log("Reported I am the Android App");
});
document.querySelectorAll("*.android").forEach((element) => {
element.classList.remove("android");
});
document.querySelectorAll("*.no-android-app").forEach((element) => {
element.style.display = "none";
});
addListenerOpenInBrowserButton(android);
const pinToHomeUrl = document.querySelector("a.pin-to-home");
if (pinToHomeUrl === null) { if (pinToHomeUrl === null) {
return; return;
} }
pinToHomeUrl.addEventListener("click", () => { pinToHomeUrl.addEventListener('click', () => {
const url = new URL(window.location.href); const url = new URL(window.location.href)
const pathandQuery = url.pathname + url.search; const pathandQuery = url.pathname + url.search;
const label = const label = (url.pathname.replace(/^.*\//g, '')
url.pathname
.replace(/^.*\//g, "")
.replace(/(?:^|-)\w/g, function(character) { .replace(/(?:^|-)\w/g, function(character) {
return character.toUpperCase(); return character.toUpperCase()
}) })
.replace(/-/g, " ") + " - Burguillos.info"; .replace(/-/g, ' ')) + ' - Burguillos.info';
const firstImg = document.querySelector("div.description img"); const firstImg = document.querySelector('div.description img');
let iconUrl; let iconUrl;
if (firstImg !== null) { if (firstImg !== null) {
if (!firstImg.src.match(/\.svg(?:\?|$)/)) { if (!firstImg.src.match(/\.svg(?:\?|$)/)) {
@ -536,16 +350,16 @@ function executeAndroidAppExclusiveCode(android) {
const imagePreview = document.querySelector('meta[name="image"]'); const imagePreview = document.querySelector('meta[name="image"]');
iconUrl = absoluteToHost(imagePreview.content); iconUrl = absoluteToHost(imagePreview.content);
} }
android.pinPage(pathandQuery, label, iconUrl); android.pinPage(pathandQuery, label, iconUrl)
}); })
} }
function addEasterEggAnimation() { function addEasterEggAnimation() {
const logoContainer = document.querySelector("div.burguillos-logo-container"); const logoContainer = document.querySelector('div.burguillos-logo-container')
if (logoContainer === null) { if (logoContainer === null) {
return; return;
} }
logoContainer.addEventListener("click", () => { logoContainer.addEventListener('click', () => {
logoContainer.classList.toggle("active"); logoContainer.classList.toggle('active')
}); })
} }

View File

@ -11,8 +11,6 @@ sub startup ($self) {
around_dispatch => sub { around_dispatch => sub {
my $next = shift; my $next = shift;
my $c = shift; my $c = shift;
my $interest = BurguillosInfo::Interest->new(app => $self);
$interest->get_interest_cookie($c);
$metrics->request($c); $metrics->request($c);
if ( defined $next ) { if ( defined $next ) {
$next->(); $next->();
@ -26,7 +24,6 @@ sub startup ($self) {
$c->stash(current_route => $current_route); $c->stash(current_route => $current_route);
my $is_android = $c->req->headers->user_agent =~ /android/i; my $is_android = $c->req->headers->user_agent =~ /android/i;
$c->stash(is_android => $is_android); $c->stash(is_android => $is_android);
$c->stash(has_seen_search_explanation => $c->cookie('has-seen-search-explanation'));
my $onion_base_url = $self->config->{onion_base_url}; my $onion_base_url = $self->config->{onion_base_url};
my $base_url = $self->config->{base_url}; my $base_url = $self->config->{base_url};
if (!defined $onion_base_url) { if (!defined $onion_base_url) {
@ -47,20 +44,13 @@ sub startup ($self) {
# Normal route to controller # Normal route to controller
$r->get('/')->to('Page#index'); $r->get('/')->to('Page#index');
$r->get('/index', sub ($c) {
$c->redirect_to('/');
});
$r->get('/privacy.txt')->to('Privacy#index'); $r->get('/privacy.txt')->to('Privacy#index');
$r->get('/sitemap.xml')->to('Sitemap#sitemap'); $r->get('/sitemap.xml')->to('Sitemap#sitemap');
$r->get('/robots.txt')->to('Robots#robots'); $r->get('/robots.txt')->to('Robots#robots');
# $r->get('/:post')->to('Page#post'); # $r->get('/:post')->to('Page#post');
$r->get('/stats')->to('Metrics#stats'); $r->get('/stats')->to('Metrics#stats');
$r->get('/product/:slug')->to('Product#direct_buy');
$r->get('/producto/:slug')->to('Product#direct_buy');
$r->get('/producto/<:slug>.json')->to('Product#get_data');
$r->get('/search.json')->to('Search#search'); $r->get('/search.json')->to('Search#search');
$r->get('/search.html')->to('Search#search_user');
$r->get('/farmacia-guardia.json')->to('FarmaciaGuardia#current'); $r->get('/farmacia-guardia.json')->to('FarmaciaGuardia#current');
$r->get('/<:category>.rss')->to('Page#category_rss'); $r->get('/<:category>.rss')->to('Page#category_rss');
$r->get('/:category_slug/atributo/<:attribute_slug>-preview.png')->to('Attribute#get_attribute_preview'); $r->get('/:category_slug/atributo/<:attribute_slug>-preview.png')->to('Attribute#get_attribute_preview');
@ -74,28 +64,6 @@ sub startup ($self) {
$r->get('/filtros/:slug')->to('Filter#get'); $r->get('/filtros/:slug')->to('Filter#get');
$r->get('/stats/login')->to('Metrics#login'); $r->get('/stats/login')->to('Metrics#login');
$r->post('/stats/login')->to('Metrics#submit_login'); $r->post('/stats/login')->to('Metrics#submit_login');
$r->get('/ping/i-am-android-app', sub ($c) {
my $interest = BurguillosInfo::Interest->new(app => $self);
$interest->set_is_android_app($c);
return $c->render(json => {ok => 1});
});
$r->get('/search/suggestions.json', sub ($c) {
my $interest = BurguillosInfo::Interest->new(app => $self);
$interest->set_javascript_capable($c);
return $c->render(json=> [
'Juguetes de Moda',
'Sonny Angel',
'Bar Beluche',
'Bar Cristóbal',
'Mesa escritorio',
'Linux',
'Libros de hacking',
'Pizzería pepin',
'Modem datos moviles USB',
'Modem USB 4G',
'Martillo emergencia coche',
]);
});
} }
1; 1;

View File

@ -47,20 +47,17 @@ sub get_next ( $self, $current_ad_number = undef ) {
if ( !defined $current_ad_number ) { if ( !defined $current_ad_number ) {
$current_ad_number = 0; $current_ad_number = 0;
} }
my $ad; my $ad = $self->get_rand_ad($array)->clone;
while (!defined $ad || $ad->id eq $current_ad_number) {
$ad = $self->get_rand_ad($array)->clone;
}
return { return {
ad => $ad->serialize, ad => $ad->serialize,
continue => 1, continue => 1,
current_ad_number => $ad->id, current_ad_number => $self->_get_next_number($current_ad_number),
}; };
} }
sub get_rand_ad($self, $array) { sub get_rand_ad($self, $array) {
my $valid_ads = [ grep { $_->is_active } @$array ]; my $valid_ads = [ grep { $_->is_active } @$array ];
my $max_weight = $self->sum_weights($valid_ads); my $max_weight = $self->sum_weights($array);
my $rand = int(rand() * $max_weight); my $rand = int(rand() * $max_weight);
my $sum_weight = 0; my $sum_weight = 0;
for my $ad (@$valid_ads) { for my $ad (@$valid_ads) {

View File

@ -21,7 +21,7 @@ sub weight {
} }
sub is_active ($self) { sub is_active ($self) {
return 0; return 1;
} }
sub img { sub img {

View File

@ -1,65 +0,0 @@
package BurguillosInfo::Ads::BurguillosDental;
use v5.36.0;
use strict;
use warnings;
use utf8;
use feature 'signatures';
use Moo;
use parent 'BurguillosInfo::Ad';
sub id ($self) {
return 'burguillos-dental';
}
sub weight {
return 50;
}
sub max_alternative {
return 3;
}
sub seconds($self) {
return 15;
}
sub default_alternative($self) {
return int($self->alternative * ($self->max_alternative + 1));
}
sub is_active ($self) {
return 0;
}
sub img ($self) {
if ( $self->default_alternative == 2 ) {
return '/img/burguillos-dental-ad-0-small.webp'
}
if ( $self->default_alternative == 1 ) {
return '/img/burguillos-dental-ad-1-small.webp'
}
return '/img/burguillos-dental-ad-1-small.webp'
}
sub text($self) {
if ( $self->default_alternative == 2 ) {
return 'Pide presupuesto para conseguir una sonrisa perfecta en Burguillos Dental, '.
'ubicado en Centro Médico Juan Manuel Pérez Sanchez.';
}
if ( $self->default_alternative == 1 ) {
return '¿Te has hecho ya tu limpieza completa de boca anual? Confia en profesionales, confia en Burguillos Dental, '.
'ubicado en Centro Médico Juan Manuel Pérez Sanchez.';
}
return '¿Te duele un diente? No lo dejes, ven a Burguillos Dental '.
'ubicado en Centro Médico Juan Manuel Pérez Sanchez.';
}
sub href {
return '/posts/burguillos-dental?come-from-ad=1';
}
1;

View File

@ -1,55 +0,0 @@
package BurguillosInfo::Ads::ChaletEnVentaCalleHinojo;
use v5.36.0;
use strict;
use warnings;
use utf8;
use DateTime;
use feature 'signatures';
use Moo;
use parent 'BurguillosInfo::Ad';
sub id ($self) {
return 'chalet-en-venta-calle-hinojo';
}
sub weight {
return 50;
}
sub max_alternative {
return 1;
}
sub seconds($self) {
return 15;
}
sub default_alternative($self) {
return int($self->alternative * ($self->max_alternative + 1));
}
sub is_active ($self) {
if (DateTime->new(year => 2024, month => 8, day => 11) < DateTime->now()) {
return 0;
}
return 1;
}
sub img ($self) {
return '/img/chalet-calle-hinojo.webp';
}
sub text($self) {
return '(VENDIDA) Chalet pareado en venta en calle Hinojo por 160 000€';
}
sub href {
return 'https://www.idealista.com/inmueble/104802645/';
}
1;

View File

@ -29,7 +29,7 @@ sub default_alternative($self) {
} }
sub is_active ($self) { sub is_active ($self) {
return 0; return 1;
} }
sub img ($self) { sub img ($self) {

View File

@ -33,7 +33,7 @@ sub default_alternative($self) {
} }
sub is_active ($self) { sub is_active ($self) {
return 0; return 1;
} }
sub img ($self) { sub img ($self) {

View File

@ -29,7 +29,7 @@ sub default_alternative($self) {
} }
sub is_active ($self) { sub is_active ($self) {
return 0; return 1;
} }
sub img ($self) { sub img ($self) {

View File

@ -17,7 +17,6 @@ use Mojo::UserAgent;
use BurguillosInfo::Posts; use BurguillosInfo::Posts;
use BurguillosInfo::Categories; use BurguillosInfo::Categories;
use BurguillosInfo::Products;
use BurguillosInfo::IndexUtils; use BurguillosInfo::IndexUtils;
my $index_utils = BurguillosInfo::IndexUtils->new; my $index_utils = BurguillosInfo::IndexUtils->new;
@ -31,11 +30,9 @@ sub run ( $self, @args ) {
my $ua = Mojo::UserAgent->new; my $ua = Mojo::UserAgent->new;
my $posts = BurguillosInfo::Posts->new->Retrieve(0); my $posts = BurguillosInfo::Posts->new->Retrieve(0);
my $categories = BurguillosInfo::Categories->new->Retrieve; my $categories = BurguillosInfo::Categories->new->Retrieve;
my $products = BurguillosInfo::Products->new->Retrieve;
my $index = []; my $index = [];
$self->_index_posts( $index, $posts ); $self->_index_posts( $index, $posts );
$self->_index_categories( $index, $categories ); $self->_index_categories( $index, $categories );
$self->_index_products( $index, $products );
my $response = $ua->put( $search_backend . '/index/' . $search_index, my $response = $ua->put( $search_backend . '/index/' . $search_index,
{} => json => $index ); {} => json => $index );
say $response->result->body; say $response->result->body;
@ -72,33 +69,6 @@ sub _index_categories ( $self, $index, $categories ) {
} }
} }
sub _index_products( $self, $index, $products ) {
my @product_keys = keys %$products;
for my $key (@product_keys) {
my $product = $products->{$key};
my $title = $product->{title};
my $content = $product->{description_text};
my $url = "/producto/@{[$product->{slug}]}";
my $image = $product->{img};
my $vendor = $product->{vendor};
push @$index, {
title => $title,
titleNormalized => $index_utils->n($title),
content => $content,
contentNormalized => $index_utils->n( $content =~ s/\s+/ /gr ),
url => $url,
urlNormalized => $index_utils->n($url),
vendor => $vendor,
(
( defined $image )
? ( urlImage => $image )
: ()
)
};
}
}
sub _index_attributes ( $self, $index, $category_slug, $attributes ) { sub _index_attributes ( $self, $index, $category_slug, $attributes ) {
my @attributes_keys = keys %$attributes; my @attributes_keys = keys %$attributes;
for my $attribute_key (@attributes_keys) { for my $attribute_key (@attributes_keys) {

View File

@ -13,7 +13,6 @@ sub next_ad {
my $self = shift; my $self = shift;
my $ads_factory = BurguillosInfo::Ads->new; my $ads_factory = BurguillosInfo::Ads->new;
my $current_ad_number = $self->param('n'); my $current_ad_number = $self->param('n');
$self->res->headers->access_control_allow_origin('*');
$self->render( json => $ads_factory->get_next($current_ad_number) ); $self->render( json => $ads_factory->get_next($current_ad_number) );
} }
1; 1;

View File

@ -126,8 +126,6 @@ sub post {
$self->render( template => '404', status => 404 ); $self->render( template => '404', status => 404 );
return; return;
} }
my $interest = BurguillosInfo::Interest->new(app => $self->app);
$interest->increment_post_interest($self, $slug);
my $current_category = $categories->{ $post->{category} }; my $current_category = $categories->{ $post->{category} };
my $base_url = $self->config('base_url'); my $base_url = $self->config('base_url');
$self->stash( $self->stash(

View File

@ -1,52 +0,0 @@
package BurguillosInfo::Controller::Product;
use v5.34.1;
use strict;
use warnings;
use BurguillosInfo::Products;
use Data::Dumper;
use Mojo::Base 'Mojolicious::Controller', '-signatures';
sub direct_buy($self) {
my $products = BurguillosInfo::Products->new->Retrieve;
my $slug = $self->param('slug');
my $product = $products->{$slug};
if (!defined $product) {
return $self->render( template => '404', status => 404 );
}
my $interest = BurguillosInfo::Interest->new(app => $self->app);
$interest->set_product_interest_visited($self, $slug);
my $referer = $self->req->headers->referer || '';
my $base_url = $self->config('base_url');
if ( $referer !~ /^$base_url/ ) {
undef $referer;
}
if ( $product->{vendor} eq 'Aliexpress' ) {
return $self->render(
template => 'page/aliexpress-product',
product => $product,
referer => $referer,
);
}
$self->redirect_to( $product->{url} );
return;
}
sub get_data($self) {
my $products = BurguillosInfo::Products->new->Retrieve;
my $slug = $self->param('slug');
my $product = $products->{$slug};
if (!defined $product) {
return $self->render( template => '404', status => 404 );
}
my $interest = BurguillosInfo::Interest->new(app => $self->app);
$interest->set_product_interest_got_details($self, $slug);
return $self->render(
json => $product
);
}
1;

View File

@ -12,65 +12,12 @@ use Mojo::UserAgent;
use BurguillosInfo::IndexUtils; use BurguillosInfo::IndexUtils;
use BurguillosInfo::Posts; use BurguillosInfo::Posts;
use BurguillosInfo::Interest;
my $index_utils = BurguillosInfo::IndexUtils->new; my $index_utils = BurguillosInfo::IndexUtils->new;
my $search_cache = {};
sub _render_search( $self, $embedded, $query ) {
my $interest = BurguillosInfo::Interest->new( app => $self->app );
$interest->increment_search_interest( $self, $query );
my $searchObjects = $search_cache->{$query};
$searchObjects = [ grep { $self->filterSearch($_) } @$searchObjects ];
$search_cache->{$query} = $searchObjects;
return $self->render(
template => 'page/search',
searchObjects => $search_cache->{$query},
embedded => $embedded,
query => $query,
);
}
sub search_user($self) {
my $ua = Mojo::UserAgent->new;
my $query = $self->param('q');
my $embedded = $self->param('e');
my $base_url = $self->config('base_url');
if ( defined $query && !$query ) {
$self->redirect_to( $base_url . '/search.html' );
}
if ( defined $search_cache->{$query} ) {
return $self->_render_search( $embedded, $query );
}
my $config = $self->config;
my $search_backend = $config->{search_backend};
my $search_index = $config->{search_index};
$query =~ s/\btitle:/titleNormalized:/g;
$query =~ s/\bcontent:/contentNormalized:/g;
my $tx = $ua->get( $search_backend . '/search/' . $search_index,
{}, form => { q => $index_utils->n($query) } );
my $result = $tx->result;
my $output = $result->json;
if ( !defined $output ) {
return $self->render( status => 500, json => { ok => 0 } );
}
my $ok = $output->{ok};
my $reason = $output->{reason};
$search_cache->{$query} = $output->{searchObjects};
return $self->_render_search( $embedded, $query );
}
sub search ($self) { sub search ($self) {
my $ua = Mojo::UserAgent->new; my $ua = Mojo::UserAgent->new;
my $query = $self->param('q'); my $query = $self->param('q');
if ( defined $search_cache->{$query} ) {
return $self->render(
status => 200,
json => { ok => 1, searchObjects => $search_cache->{$query} }
);
}
my $config = $self->config; my $config = $self->config;
my $search_backend = $config->{search_backend}; my $search_backend = $config->{search_backend};
my $search_index = $config->{search_index}; my $search_index = $config->{search_index};
@ -91,10 +38,9 @@ sub search ($self) {
} }
my $searchObjects = $output->{searchObjects}; my $searchObjects = $output->{searchObjects};
$searchObjects = [grep { $self->filterSearch($_) } @$searchObjects]; $searchObjects = [grep { $self->filterSearch($_) } @$searchObjects];
$search_cache->{$query} = $searchObjects;
return $self->render( return $self->render(
status => 200, status => 200,
json => { ok => 1, searchObjects => $search_cache->{$query} } json => { ok => 1, searchObjects => $searchObjects }
); );
} }
@ -102,17 +48,12 @@ sub filterSearch( $self, $searchObject ) {
my $url = $searchObject->{url}; my $url = $searchObject->{url};
my ($posts_by_categories, $posts) = BurguillosInfo::Posts->Retrieve; my ($posts_by_categories, $posts) = BurguillosInfo::Posts->Retrieve;
my $slug; my $slug;
my $interest = BurguillosInfo::Interest->new( app => $self->app );
if ($url =~ m{^/posts/([^/]+?)(?:\?.*)?$}) { if ($url =~ m{^/posts/([^/]+?)(?:\?.*)?$}) {
$slug = $1; $slug = $1;
if (!defined $posts->{$slug}) { if (!defined $posts->{$slug}) {
return 0; return 0;
} }
} }
if ( $url =~ m{^/producto?/([^/]+?)(?:\?.*)?$} ) { return 1
$slug = $1;
$interest->set_product_interest_searched( $self, $slug );
}
return 1;
} }
1; 1;

View File

@ -14,25 +14,6 @@ use XML::Twig;
use Mojo::Base 'Mojolicious::Controller', '-signatures'; use Mojo::Base 'Mojolicious::Controller', '-signatures';
sub _featured_searches($self) {
return [
'cristobal',
'ermita',
'tocinito',
'cochinito',
'libros de hacking',
'horno pizza aire libre',
'fogon de segovia',
'martillo para emergencias vidrio coche',
'donde comprar sonny angel en Burguillos',
'',
'bus',
'autobus',
'autobus burguillos sevilla',
'telefono policia local burguillos',
];
}
sub sitemap ($self) { sub sitemap ($self) {
my $categories = BurguillosInfo::Categories->new->Retrieve; my $categories = BurguillosInfo::Categories->new->Retrieve;
my $dom = Mojo::DOM->new_tag( my $dom = Mojo::DOM->new_tag(
@ -44,11 +25,6 @@ sub sitemap ($self) {
for my $category_key ( keys %$categories ) { for my $category_key ( keys %$categories ) {
$self->_append_category_dom( $dom, $category_key, $categories ); $self->_append_category_dom( $dom, $category_key, $categories );
} }
my $searches = $self->_featured_searches;
for my $search (@$searches) {
$dom->child_nodes->first->append_content(
$self->_generate_url_for_search($search) );
}
my $xml_string = "$dom"; my $xml_string = "$dom";
my $document = XML::Twig->new(pretty_print=> 'indented'); my $document = XML::Twig->new(pretty_print=> 'indented');
$xml_string = $document->parse($xml_string)->sprint; $xml_string = $document->parse($xml_string)->sprint;
@ -78,12 +54,10 @@ sub _append_category_dom ( $self, $dom, $category_key, $categories ) {
$date_last_modification_category ); $date_last_modification_category );
if (defined $final_date_last_modification_category) { if (defined $final_date_last_modification_category) {
my $last_modification_tag = my $last_modification_tag =
Mojo::DOM->new_tag( Mojo::DOM->new_tag( lastmod => $final_date_last_modification_category );
lastmod => $final_date_last_modification_category );
$url->child_nodes->first->append_content($last_modification_tag); $url->child_nodes->first->append_content($last_modification_tag);
} }
$self->_append_attributes_category_sitemap( $dom, $category_key, $self->_append_attributes_category_sitemap($dom, $category_key, $categories);
$categories );
my $priority_tag = Mojo::DOM->new_tag( priority => 0.6 ); my $priority_tag = Mojo::DOM->new_tag( priority => 0.6 );
$url->child_nodes->first->append_content($location_tag); $url->child_nodes->first->append_content($location_tag);
$url->child_nodes->first->append_content($priority_tag); $url->child_nodes->first->append_content($priority_tag);
@ -91,32 +65,17 @@ sub _append_category_dom ( $self, $dom, $category_key, $categories ) {
$dom->child_nodes->first->append_content($url); $dom->child_nodes->first->append_content($url);
} }
sub _append_attributes_category_sitemap( $self, $dom, $category_key, sub _append_attributes_category_sitemap($self, $dom, $category_key, $categories) {
$categories )
{
my $base_url = $self->config('base_url'); my $base_url = $self->config('base_url');
my $category = $categories->{$category_key}; my $category = $categories->{$category_key};
for my $attribute (keys $category->{attributes}->%*) { for my $attribute (keys $category->{attributes}->%*) {
my $url = Mojo::DOM->new_tag('url'); my $url = Mojo::DOM->new_tag('url');
my $location_tag = Mojo::DOM->new_tag( my $location_tag = Mojo::DOM->new_tag( loc => "$base_url/$category_key/atributo/$attribute" );
loc => "$base_url/$category_key/atributo/$attribute" );
$url->child_nodes->first->append_content($location_tag); $url->child_nodes->first->append_content($location_tag);
$dom->child_nodes->first->append_content($url); $dom->child_nodes->first->append_content($url);
} }
} }
sub _generate_url_for_search ( $self, $query ) {
my $url_tag = Mojo::DOM->new_tag('url');
my $base_url = $self->config('base_url');
my $url_resource = Mojo::URL->new("$base_url/search.html");
if ($query) {
$url_resource->query( q => $query );
}
my $location_tag = Mojo::DOM->new_tag( loc => $url_resource );
$url_tag->child_nodes->first->append_content($location_tag);
return $url_tag;
}
sub _generate_url_for_post ( $self, $post ) { sub _generate_url_for_post ( $self, $post ) {
my $url_tag = Mojo::DOM->new_tag('url'); my $url_tag = Mojo::DOM->new_tag('url');
my $date = $post->{date}; my $date = $post->{date};

View File

@ -49,36 +49,6 @@ sub MIGRATIONS {
id_farmacia TEXT NOT NULL id_farmacia TEXT NOT NULL
);', );',
'CREATE INDEX farmacia_guardia_index on farmacia_guardia (date, id_farmacia, uuid);', 'CREATE INDEX farmacia_guardia_index on farmacia_guardia (date, id_farmacia, uuid);',
'CREATE TABLE interest_cookies (
id BIGSERIAL NOT NULL PRIMARY KEY,
cookie_value UUID NOT NULL UNIQUE
);',
'CREATE TABLE interest_products (
id BIGSERIAL NOT NULL PRIMARY KEY,
id_cookie BIGINT NOT NULL,
max_interest INT NOT NULL,
slug TEXT NOT NULL,
FOREIGN KEY (id_cookie) REFERENCES interest_cookies(id),
UNIQUE(id_cookie, slug)
);',
'CREATE TABLE interest_posts (
id BIGSERIAL NOT NULL PRIMARY KEY,
id_cookie BIGINT NOT NULL,
slug TEXT NOT NULL,
FOREIGN KEY (id_cookie) REFERENCES interest_cookies(id)
);',
'CREATE TABLE interest_searches (
id BIGSERIAL NOT NULL PRIMARY KEY,
id_cookie BIGINT NOT NULL,
term TEXT NOT NULL,
FOREIGN KEY (id_cookie) REFERENCES interest_cookies(id)
);',
'ALTER TABLE interest_posts ADD column count BIGINT NOT NULL;',
'ALTER TABLE interest_posts ADD CONSTRAINT interest_post_unique_constraint UNIQUE (id_cookie, slug);',
'ALTER TABLE interest_searches ADD column count BIGINT NOT NULL;',
'ALTER TABLE interest_searches ADD CONSTRAINT interest_search_unique_constraint UNIQUE (id_cookie, term);',
'ALTER TABLE interest_cookies ADD column has_javascript BOOLEAN DEFAULT false NOT NULL;',
'ALTER TABLE interest_cookies ADD column is_android_app BOOLEAN DEFAULT false NOT NULL;',
); );
} }

View File

@ -17,12 +17,7 @@ use Lingua::Stem::Snowball;
sub normalize($self, $text) { sub normalize($self, $text) {
return undef if !defined $text; return undef if !defined $text;
my $decomposed = NFKD($text); my $decomposed = NFKD($text);
$decomposed =~ s/\bautobus\b/horario autobus martillo/gi;
$decomposed =~ s/\bbus\b/horario autobus martillo/gi;
$decomposed =~ s/\bautobus burguillos sevilla\b/horario autobus martillo/gi;
$decomposed =~ s/\bhack\S+\b/hack/gi;
$decomposed =~ s/\p{NonspacingMark}//g; $decomposed =~ s/\p{NonspacingMark}//g;
$decomposed =~ s/\bEl\b//gi;
my @words; my @words;
while ($decomposed =~ /\b(\w+)\b/g) { while ($decomposed =~ /\b(\w+)\b/g) {
push @words, $1; push @words, $1;
@ -31,8 +26,6 @@ sub normalize($self, $text) {
$stemmer->stem_in_place(\@words); $stemmer->stem_in_place(\@words);
$decomposed = join " ", @words; $decomposed = join " ", @words;
$decomposed =~ s/\bpizzeri\b/pizz/gi; $decomposed =~ s/\bpizzeri\b/pizz/gi;
$decomposed =~ s/pizz/pizz horn/gi;
$decomposed =~ s/\bcristob\b/cristobal/gi;
return $decomposed; return $decomposed;
} }

View File

@ -1,157 +0,0 @@
package BurguillosInfo::Interest;
use v5.40.0;
use strict;
use warnings;
use utf8;
use Moo;
use BurguillosInfo::DB;
use UUID::URandom qw/create_uuid_hex/;
use namespace::clean;
has _dbh => ( is => 'lazy', );
has app => (
is => 'rw',
required => 1,
);
sub _build__dbh($self) {
my $app = $self->app;
return BurguillosInfo::DB->connect($app);
}
sub set_is_android_app( $self, $c ) {
my $cookie_value = $self->get_interest_cookie($c);
my $dbh = $self->_dbh;
$dbh->do(
'UPDATE interest_cookies SET is_android_app = true WHERE cookie_value = ?',
{}, $cookie_value
);
}
sub set_javascript_capable( $self, $c ) {
my $cookie_value = $self->get_interest_cookie($c);
my $dbh = $self->_dbh;
$dbh->do(
'UPDATE interest_cookies SET has_javascript = true WHERE cookie_value = ?',
{}, $cookie_value
);
}
sub get_interest_cookie( $self, $c ) {
my $cookie_value = $c->cookie( $self->_cookie_name, );
say $cookie_value;
if ( !defined $cookie_value ) {
$cookie_value = create_uuid_hex();
say $cookie_value;
}
eval {
$self->_dbh->do( '
INSERT INTO interest_cookies
(cookie_value)
VALUES (?);
', {}, $cookie_value );
};
if ($@) {
# warn $@;
}
$c->cookie(
$self->_cookie_name,
$cookie_value,
{
expires => time + 3600 * 24 * 390,
samesite => 'Lax',
(
$c->config('base_url') =~ /https/
? ( secure => 1, )
: ()
),
}
);
return $cookie_value;
}
sub increment_search_interest( $self, $c, $term ) {
my $cookie_value = $self->get_interest_cookie($c);
my $dbh = $self->_dbh;
$dbh->do( '
INSERT INTO interest_searches (
id_cookie,
term,
count
)
SELECT id, ?, 1
FROM interest_cookies
WHERE cookie_value = ?
ON CONFLICT (id_cookie, term)
DO UPDATE SET
count
= interest_searches.count + 1;
', {}, $term, $cookie_value );
}
sub increment_post_interest( $self, $c, $slug ) {
my $cookie_value = $self->get_interest_cookie($c);
my $dbh = $self->_dbh;
$dbh->do( '
INSERT INTO interest_posts (
id_cookie,
slug,
count
)
SELECT id, ?, 1
FROM interest_cookies
WHERE cookie_value = ?
ON CONFLICT (id_cookie, slug)
DO UPDATE SET
count
= interest_posts.count + 1;
', {}, $slug, $cookie_value );
}
sub _set_product_interest( $self, $c, $slug, $interest_value ) {
my $cookie_value = $self->get_interest_cookie($c);
my $dbh = $self->_dbh;
$dbh->do( '
INSERT INTO interest_products (
id_cookie,
max_interest,
slug
)
SELECT id, ?, ?
FROM interest_cookies
WHERE cookie_value = ?
ON CONFLICT (id_cookie, slug)
DO UPDATE SET
max_interest
= GREATEST(
EXCLUDED.max_interest,
interest_products.max_interest
);
', {}, $interest_value, $slug, $cookie_value );
}
sub set_product_interest_searched( $self, $c, $slug ) {
$self->_set_product_interest( $c, $slug, 100 );
}
sub set_product_interest_got_details( $self, $c, $slug ) {
$self->_set_product_interest( $c, $slug, 500 );
}
sub set_product_interest_visited( $self, $c, $slug ) {
$self->_set_product_interest( $c, $slug, 1000 );
}
sub _cookie_name {
return 'birra';
}
1;

View File

@ -81,31 +81,6 @@ sub _GeneratePostFromFile ( $self, $post_file ) {
if ( !scalar @categories ) { if ( !scalar @categories ) {
die 'Missing category'; die 'Missing category';
} }
my $i = 0;
for my $p ($content_tag->find('content > p')->each) {
if ($i % 2 == 0) {
$i++;
next;
}
$i++;
my $next_object = $p->next;
my $script = '<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8178723521508611"
crossorigin="anonymous"></script>
<ins class="adsbygoogle"
style="display:block; text-align:center;"
data-ad-layout="in-article"
data-ad-format="fluid"
data-ad-client="ca-pub-8178723521508611"
data-ad-slot="2737408238"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>';
# if (defined $next_object) {
# $next_object->prepend($script);
# } else {
# $p->parent->append($script);
# }
}
my $content = $content_tag->content; my $content = $content_tag->content;
my $pinned_node = $dom->at(':root > pinned'); my $pinned_node = $dom->at(':root > pinned');
my $image_element = $dom->at(':root > img'); my $image_element = $dom->at(':root > img');

View File

@ -1,56 +0,0 @@
package BurguillosInfo::Products;
use v5.40.0;
use strict;
use warnings;
use utf8;
use Moo;
use Const::Fast;
use Path::Tiny;
const my $CURRENT_FILE => __FILE__;
const my $PRODUCTS_DIR =>
path($CURRENT_FILE)->parent->parent->parent->child('content/products/');
my $cached_products;
sub Retrieve ($self) {
if ( defined $cached_products ) {
return $cached_products;
}
$cached_products = {};
for my $product_file ( $PRODUCTS_DIR->children ) {
warn "Bad file $product_file, omiting...", next
if !-f $product_file || $product_file !~ /\.xml$/;
my $dom = Mojo::DOM->new->xml(1)->parse( $product_file->slurp_utf8 );
defined( my $title = $dom->at(':root > title')->text )
or die "Missing title at $product_file.";
defined( my $description = $dom->at(':root > description')->content )
or die "Missing description at $product_file.";
defined( my $description_text =
$dom->at(':root > description')->all_text )
or die "Missing description at $product_file.";
defined( my $slug = $dom->at(':root > slug')->text )
or die "Missing slug at $product_file.";
defined( my $img = $dom->at(':root > img')->text )
or die "Missing img at $product_file.";
defined( my $vendor = $dom->at(':root > vendor')->text )
or die "Missing vendor at $product_file.";
defined( my $url = $dom->at(':root > url')->text )
or die "Missing url at $product_file.";
$cached_products->{$slug} = {
title => $title,
description => $description,
description_text => $description_text,
slug => $slug,
img => $img,
vendor => $vendor,
url => $url,
};
}
return $cached_products;
}

View File

@ -116,13 +116,13 @@ sub register_request {
my $c = shift; my $c = shift;
my $path = $c->req->url->path; my $path = $c->req->url->path;
# Avoiding overloading the /stats endpoint. # Avoiding overloading the /stats endpoint.
my $referer = $c->req->headers->referer // ''; return if $path =~ /\.json$/;
return if $path =~ /next-ad\.json$/ || $referer =~ m{\.onion\/};
my $dbh = BurguillosInfo::DB->connect($app); my $dbh = BurguillosInfo::DB->connect($app);
$self->_add_path($path); $self->_add_path($path);
$self->_update_null_last_seen_paths_if_any(); $self->_update_null_last_seen_paths_if_any();
my $remote_address = $c->tx->remote_address; my $remote_address = $c->tx->remote_address;
my $user_agent = $c->req->headers->user_agent; my $user_agent = $c->req->headers->user_agent;
my $referer = $c->req->headers->referer // '';
my $params_json = encode_json( $c->req->params->to_hash ); my $params_json = encode_json( $c->req->params->to_hash );
$self->_register_request_query( $remote_address, $user_agent, $params_json, $self->_register_request_query( $remote_address, $user_agent, $params_json,
$path, $referer ); $path, $referer );
@ -139,18 +139,15 @@ sub get_global_data {
SELECT SELECT
( (
$SELECT_GLOBAL $SELECT_GLOBAL
where path not like '%/%.%' and where date > NOW() - interval '1 day'
date > NOW() - interval '1 day'
) as unique_ips_last_24_hours, ) as unique_ips_last_24_hours,
( (
$SELECT_GLOBAL $SELECT_GLOBAL
where path not like '%/%.%' and where date > NOW() - interval '1 week'
date > NOW() - interval '1 week'
) as unique_ips_last_week, ) as unique_ips_last_week,
( (
$SELECT_GLOBAL $SELECT_GLOBAL
where path not like '%/%.%' and where date > NOW() - interval '1 month'
date > NOW() - interval '1 month'
) as unique_ips_last_month; ) as unique_ips_last_month;
EOF EOF
return $data; return $data;

View File

@ -16,7 +16,7 @@
"eslint-config-prettier": "^9.0.0", "eslint-config-prettier": "^9.0.0",
"eslint-plugin-no-relative-import-paths": "^1.5.2", "eslint-plugin-no-relative-import-paths": "^1.5.2",
"husky": "^8.0.3", "husky": "^8.0.3",
"lint-staged": "^15.3.0", "lint-staged": "^14.0.1",
"prettier": "^3.0.3", "prettier": "^3.0.3",
"prettier-eslint": "^16.1.2", "prettier-eslint": "^16.1.2",
"typescript": "^5.2.2", "typescript": "^5.2.2",
@ -24,10 +24,8 @@
}, },
"dependencies": { "dependencies": {
"babel-loader": "^9.1.3", "babel-loader": "^9.1.3",
"cookieconsent": "^3.1.1",
"ol": "^8.1.0", "ol": "^8.1.0",
"tablesort": "^5.3.0", "tablesort": "^5.3.0",
"ts-loader": "^9.5.0", "ts-loader": "^9.5.0"
"vanilla-cookieconsent": "^3.0.1"
} }
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -2,145 +2,6 @@ html {
height: 100%; height: 100%;
touch-action: none; } touch-action: none; }
#url-copy {
width: 0;
height: 0;
opacity: 0; }
body nav.mobile-shortcuts div.search div.fake-text-box input[type="text"] {
position: absolute;
top: 47%;
transform: translateY(-50%); }
body nav.mobile-shortcuts div.search a.search-icon {
margin-top: 0px; }
a.brand {
text-decoration: none;
color: black;
margin-top: 0px;
margin-bottom: 0px;
font-size: 2em;
width: fit-content;
height: fit-content;
margin-left: 5px; }
a.brand img {
height: 0.8em;
width: fit-content;
aspect-ratio: 1 / 1; }
body.aliexpress-redirection {
background: azure; }
div.warning-aliexpress {
display: block;
overflow: scroll;
background: white;
width: calc(90% - 100px);
border: solid 3px black;
border-radius: 20px;
position: absolute;
left: 50%;
transform: translate(-50%, -50%);
top: 50%;
height: 80%;
padding: 50px;
max-width: 874px; }
div.warning-aliexpress h1 {
margin-top: 10px;
text-align: center; }
div.warning-aliexpress div.buttons {
width: 50%;
max-width: 409px;
min-width: 250px;
margin-left: 50%;
transform: translateX(-50%); }
div.warning-aliexpress div.buttons img {
width: 100%; }
div.warning-aliexpress div.buttons a {
font-size: 0.8em;
display: inline-block;
margin-top: 20px;
border-radius: 10px;
padding: 10px;
border: solid 3px black;
text-decoration: none;
font-weight: bold; }
div.warning-aliexpress div.buttons a.buy {
color: #5C25A0;
background: #a9d9ab;
border-color: transparent; }
div.warning-aliexpress div.buttons a.back {
color: #732EC8;
background: #ff958c;
border-color: transparent; }
div.tooltip-search-promo::after {
content: " ";
position: absolute;
top: calc(100% - 3px);
left: 50%;
transform: translateX(-50%);
margin-left: -9px;
border-width: 9px;
border-style: solid;
border-color: #390384 transparent transparent transparent;
opacity: 80%; }
div.tooltip-search-promo.hidden {
display: none; }
div.tooltip-search-promo.hidden::after {
display: none; }
div.tooltip-search-promo {
background-color: #390384;
padding: 10px;
border-radius: 5px;
width: 200px;
text-align: center;
color: white;
font-size: 14px;
line-height: 18px;
position: absolute;
z-index: 100;
left: 50%;
bottom: 115%;
transform: translateX(-50%);
opacity: 80%; }
div.tooltip-search-promo p.exit {
display: block;
position: absolute;
top: calc(0% - 5px);
left: calc(100% - 15px);
transform: translatex(-50%); }
div.open-browser-container {
display: flex;
justify-content: start;
width: 100%;
margin-left: 0px;
margin-right: 0px;
padding-left: 0px;
padding-right: 0px;
background: #f2eb8c;
color: blueviolet; }
div.open-browser-container a.open-in-browser {
text-decoration: none;
display: flex;
justify-content: space-between;
width: calc(100% - 20px);
align-items: center;
margin-left: 10px;
margin-right: 10px; }
div.open-browser-container a.open-in-browser img {
display: block;
height: 2rem;
width: 2rem;
margin-right: 0px;
margin-left: 0px; }
div.open-browser-container a.open-in-browser span {
display: block; }
body { body {
margin: 0; margin: 0;
padding: 0; padding: 0;
@ -148,24 +9,13 @@ body {
min-height: 100%; min-height: 100%;
width: 100%; width: 100%;
height: 100%; } height: 100%; }
body summary h2,
body summary h3,
body summary h4,
body summary h5 {
display: inline; }
body converse-muc-sidebar {
display: none !important; }
body div.converse-container {
width: 100%;
height: 400px;
margin-left: 0px; }
body div.page-contents div.footer p.attribution { body div.page-contents div.footer p.attribution {
font-size: 0.8em; } font-size: 0.8em; }
body div.page-contents div.footer p.attribution a { body div.page-contents div.footer p.attribution a {
font-size: 0.8em; } font-size: 0.8em; }
body span.round-center { body span.round-center {
background: blueviolet; background: blueviolet;
color: #fefefa; color: #FEFEFA;
line-height: 100%; line-height: 100%;
aspect-ratio: 1 / 1; aspect-ratio: 1 / 1;
display: inline-flex; display: inline-flex;
@ -178,106 +28,39 @@ body {
align-items: center; align-items: center;
vertical-align: middle; vertical-align: middle;
margin-bottom: 0.15em; } margin-bottom: 0.15em; }
body div.tutorial-overlay-step-1 {
position: fixed;
display: block;
width: 100%;
height: 100%;
background: rgba(100, 100, 100, 0.5);
top: 0%;
z-index: 999; }
body div.tutorial-overlay-step-1 > .explanation {
position: absolute;
left: 10px;
color: aquamarine;
background: rgba(100, 100, 100, 0.5);
width: 230px;
text-align: center;
border-radius: 10px;
border: solid 3px black;
font-size: 30px;
top: calc(100% - 80px - 203px - 90px); }
body div.tutorial-overlay-step-1 > .arrow {
position: absolute;
left: 90px;
top: calc(100% - 80px - 203px);
display: block; }
body div.tutorial-overlay-step-1.hidden {
display: none; }
body div.search-results > div.description {
display: flex;
align-items: center;
flex-direction: column;
background: #2160c4;
border: solid #9dc1fa 0.3rem;
color: white;
font-weight: bold;
border-radius: 20px;
width: calc(100% - 20px - 0.6rem);
padding: 10px; }
body div.search-overlay.default div.search-results {
height: calc(100% - 80px - 37px); }
body div.search-overlay { body div.search-overlay {
overflow-y: scroll; overflow-y: scroll;
display: none; display: none;
position: fixed; position: fixed;
height: 100%; height: 100%;
width: 100%; width: 100%;
overflow-x: hidden;
background: white; background: white;
z-index: 3; z-index: 3;
top: 0; top: 0;
flex-direction: column; } flex-direction: column; }
body div.search-overlay.active {
display: flex; }
body div.search-overlay div.search-results { body div.search-overlay div.search-results {
height: calc(100% - 80px);
overflow-y: scroll;
margin: 7px; } margin: 7px; }
body div.search-overlay div.search-results img { body div.search-overlay div.search-results img {
width: 75px; width: 75px; }
height: fit-content; }
body div.search-overlay div.search-results div.search-result div.row-title-url-image { body div.search-overlay div.search-results div.search-result div.row-title-url-image {
display: flex; display: flex;
flex-direction: row; flex-direction: row; }
overflow: hidden; }
body div.search-overlay div.search-results div.search-result div.row-title-url-image img { body div.search-overlay div.search-results div.search-result div.row-title-url-image img {
aspect-ratio: 1 / 1;
margin: 10px; } margin: 10px; }
body div.search-overlay div.search-results div.search-result a.search-button-buy-now {
display: block;
margin: 30px;
margin-left: 30px;
margin-left: 10px;
padding: 20px;
border-radius: 10px;
background: #717ab9;
color: white;
font-weight: bold;
text-decoration: none; }
body div.search-overlay div.search-results div.search-result p.product-vendor {
font-size: 10px;
color: cornflowerblue; }
body div.search-overlay div.search-results div.search-result div.search-result-content {
background: aliceblue;
width: fit-content;
padding: 20px;
margin-left: 90px;
margin-right: 20px; }
body div.search-overlay div.search-results div.search-result div.search-result-content a.expand {
color: white;
background: #717ab9;
text-decoration: none;
border-radius: 10px;
padding: 10px; }
body div.search-overlay div.bounding-search-bar { body div.search-overlay div.bounding-search-bar {
position: fixed;
top: calc(100% - 74px);
margin: 7px; margin: 7px;
width: calc(100% - 20px); width: calc(100% - 20px);
border-radius: 10px; border-radius: 10px;
height: 60px; height: 60px;
display: flex; } display: flex; }
body div.search-overlay div.bounding-search-bar a.up, body div.search-overlay div.bounding-search-bar div.search {
body div.search-overlay div.bounding-search-bar a.down { width: calc(100% - 60px);
height: 60px;
margin-left: 0px;
margin-right: 0px; }
body div.search-overlay div.bounding-search-bar a.up, body div.search-overlay div.bounding-search-bar a.down {
display: none; } display: none; }
body div.search-overlay div.bounding-search-bar a.exit-search { body div.search-overlay div.bounding-search-bar a.exit-search {
width: 60px; width: 60px;
@ -294,21 +77,17 @@ body {
margin-right: 10px; margin-right: 10px;
display: flex; } display: flex; }
body div.search a.search-icon { body div.search a.search-icon {
position: absolute; height: calc(100% - 28px);
top: 50%;
transform: translateY(-50%);
height: 30px;
align-self: center; align-self: center;
margin: 7px;
display: flex; display: flex;
background: aliceblue; background: aliceblue;
align-items: center; align-items: center;
margin-top: 4px;
margin-left: 7px;
padding: 7px; padding: 7px;
border-radius: 10px; border-radius: 10px;
border: solid gray 3px; border: solid gray 1px;
aspect-ratio: 1 / 1; aspect-ratio: 1 / 1;
width: fit-content; } width: auto; }
body div.search a.search-icon img { body div.search a.search-icon img {
height: 80%; height: 80%;
aspect-ratio: 1 / 1; } aspect-ratio: 1 / 1; }
@ -320,18 +99,11 @@ body {
font-size: 30px; font-size: 30px;
width: 100%; width: 100%;
height: 70%; height: 70%;
margin-bottom: 10px;
margin-left: 70px;
background: none; background: none;
border: none; border: none;
outline: none; } outline: none; }
body p, body p, body h1, body h2, body h3, body h4, body a {
body h1, font-family: 'arial'; }
body h2,
body h3,
body h4,
body a {
font-family: "arial"; }
body *.android { body *.android {
display: none; } display: none; }
body div.site-wrapper { body div.site-wrapper {
@ -351,11 +123,11 @@ body {
height: 20%; height: 20%;
width: 100%; } width: 100%; }
body div.carousel a { body div.carousel a {
position: absolute; position: fixed;
top: 0; top: 80%;
border: solid 3px black; border: solid 3px black;
width: calc(100% - 6px); width: calc(100% - 6px);
height: calc(100% - 6px); height: calc(20% - 6px);
left: 100%; left: 100%;
transition: left 1s ease-in; transition: left 1s ease-in;
font-size: 13px; font-size: 13px;
@ -373,10 +145,9 @@ body {
body div.carousel a:hover, body div.carousel a:focus { body div.carousel a:hover, body div.carousel a:focus {
background: blueviolet; background: blueviolet;
color: #f2eb8c; } color: #f2eb8c; }
body div.carousel a p { body div.carousel div.promoted-tag, body div.carousel h3 {
margin-bottom: 1px; } margin: 0;
body div.carousel a h4 { margin-right: 5px; }
margin: 0; }
body div.carousel img { body div.carousel img {
margin: 10px; margin: 10px;
height: calc(100% - 20px); height: calc(100% - 20px);
@ -393,9 +164,9 @@ body {
height: 100%; height: 100%;
width: 100%; } width: 100%; }
body div.page-contents.no-carousel { body div.page-contents.no-carousel {
height: calc(100% - 80px); } height: calc(100% - 60px); }
body nav { body nav {
overflow: visible; overflow: auto;
display: block; display: block;
font-size: 25px; font-size: 25px;
margin: 0px; } margin: 0px; }
@ -411,7 +182,7 @@ body {
background: #f2eb8c; background: #f2eb8c;
color: blueviolet; } color: blueviolet; }
body nav a.selected { body nav a.selected {
background: #fefefa; background: #FEFEFA;
color: blueviolet; color: blueviolet;
border-right: 1px solid blueviolet; } border-right: 1px solid blueviolet; }
body nav.desktop { body nav.desktop {
@ -436,7 +207,8 @@ body {
left: 0; left: 0;
width: 100%; width: 100%;
opacity: 40%; opacity: 40%;
height: calc(100% - 80px); top: 60px;
height: calc(100% - 60px);
z-index: 250; z-index: 250;
display: none; } display: none; }
body div.transparent-fullscreen-hide.show { body div.transparent-fullscreen-hide.show {
@ -445,11 +217,12 @@ body {
visibility: hidden; visibility: hidden;
position: fixed; position: fixed;
left: 100%; left: 100%;
width: Min(70%, 600px); width: 70%;
height: calc(100% - 80px); top: 60px;
height: calc(100% - 60px);
z-index: 500; z-index: 500;
transition: left 0.5s ease-in, visibility 0.5s ease-in; transition: left 0.5s ease-in, visibility 0.5s ease-in;
background: #fefefa; } background: #FEFEFA; }
body nav.mobile-foldable > a:first-child { body nav.mobile-foldable > a:first-child {
margin-top: 30px; } margin-top: 30px; }
body nav.mobile-foldable a { body nav.mobile-foldable a {
@ -459,7 +232,7 @@ body {
padding-left: auto; padding-left: auto;
padding-right: auto; padding-right: auto;
color: blueviolet; color: blueviolet;
background: #fefefa; background: #FEFEFA;
margin-top: 10px; margin-top: 10px;
padding: 10px; padding: 10px;
margin-left: 10px; margin-left: 10px;
@ -479,7 +252,7 @@ body {
align-items: center; align-items: center;
justify-content: center; } justify-content: center; }
body nav.mobile-shortcuts > a.active { body nav.mobile-shortcuts > a.active {
background: #fefefa; background: #FEFEFA;
color: #dcdcf5; } color: #dcdcf5; }
body nav.mobile-shortcuts > a.active:focus { body nav.mobile-shortcuts > a.active:focus {
background: #f2eb8c; } background: #f2eb8c; }
@ -492,14 +265,13 @@ body {
body a.menu-expand:hover .open-menu-icon, body a.menu-expand:focus .open-menu-icon, body a.menu-expand.active .open-menu-icon { body a.menu-expand:hover .open-menu-icon, body a.menu-expand:focus .open-menu-icon, body a.menu-expand.active .open-menu-icon {
display: none; } display: none; }
body nav > a.menu-expand > img { body nav > a.menu-expand > img {
width: 40px; width: 30px;
height: 40px; } height: 30px; }
body nav > a > img.index-image-menu { body nav > a > img.index-image-menu {
vertical-align: middle; vertical-align: middle;
width: 60px; width: 40px;
height: 60px; } height: 40px; }
body nav > a > img.index-image-menu, body nav > a > img.index-image-menu, body div.burguillos-logo-container > img {
body div.burguillos-logo-container > img {
transition-property: transform; transition-property: transform;
transition-duration: 2s; transition-duration: 2s;
transition-delay: 2s; } transition-delay: 2s; }
@ -509,14 +281,13 @@ body {
body div.search-in-page { body div.search-in-page {
display: none; display: none;
position: fixed; position: fixed;
top: calc(100% - 80px - 60px); top: 60px;
height: 60px; height: 60px;
width: 100%; width: 100%;
align-items: center; align-items: center;
background: blueviolet; background: blueviolet;
z-index: 3; } z-index: 3; }
body div.search-in-page a.up, body div.search-in-page a.up, body div.search-in-page a.down {
body div.search-in-page a.down {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@ -530,8 +301,7 @@ body {
border-radius: 10px; border-radius: 10px;
border: solid gray 1px; border: solid gray 1px;
aspect-ratio: 1/1; } aspect-ratio: 1/1; }
body div.search-in-page a.up img, body div.search-in-page a.up img, body div.search-in-page a.down img {
body div.search-in-page a.down img {
height: 80%; } height: 80%; }
body div.search-in-page span { body div.search-in-page span {
color: whitesmoke; color: whitesmoke;
@ -544,32 +314,24 @@ body {
align-items: center; align-items: center;
width: 100%; width: 100%;
background: blueviolet; background: blueviolet;
height: 80px; height: 60px;
justify-content: start; top: 0%; }
flex-direction: row;
top: calc(100% - 80px); }
body nav.mobile-shortcuts a { body nav.mobile-shortcuts a {
height: 100%; height: 100%;
width: 80px; width: 16.6666666667%;
padding-left: 0; padding-left: 0;
padding-top: 0; padding-top: 0;
padding-right: 0; padding-right: 0;
padding-bottom: 0; } padding-bottom: 0; }
body nav.mobile-shortcuts a.go-to-index {
position: absolute;
left: 0;
top: 0; }
body nav.mobile-shortcuts div.search { body nav.mobile-shortcuts div.search {
position: absolute; width: calc(100% * 4 / 6 - 20px);
left: 80px;
top: 10%;
width: Min(calc(100% - 120px), 500px);
height: 80%; height: 80%;
border-radius: 10px; } border-radius: 10px; }
body div.page-contents { body div.page-contents {
background: #fefefa; background: #FEFEFA;
position: fixed; position: fixed;
height: calc(80% - 80px); top: 60px;
height: calc(80% - 60px);
width: 100%; width: 100%;
overflow-y: scroll; } overflow-y: scroll; }
body div.page-contents div.child-categories-mobile a { body div.page-contents div.child-categories-mobile a {
@ -589,14 +351,11 @@ body {
body div.page-contents table tr:hover { body div.page-contents table tr:hover {
background: blueviolet; background: blueviolet;
color: #f2eb8c; } color: #f2eb8c; }
body div.page-contents table tr:hover th, body div.page-contents table tr:hover th, body div.page-contents table tr:hover td {
body div.page-contents table tr:hover td {
border: 3px solid #f2eb8c; } border: 3px solid #f2eb8c; }
body div.page-contents table td, body div.page-contents table td, body div.page-contents table th {
body div.page-contents table th {
font-size: 12px; } font-size: 12px; }
body div.page-contents th, body div.page-contents th, body div.page-contents td {
body div.page-contents td {
border: 3px solid blueviolet; border: 3px solid blueviolet;
border-collapse: collapse; border-collapse: collapse;
padding-right: 10px; padding-right: 10px;
@ -653,10 +412,7 @@ body {
color: blueviolet; color: blueviolet;
box-shadow: 8px 8px 1px 0px #8ddfd6; box-shadow: 8px 8px 1px 0px #8ddfd6;
border: 3px solid black; } border: 3px solid black; }
body div.page-contents div.description div.articles a article p, body div.page-contents div.description div.articles a article p, body div.page-contents div.description div.articles a article h4, body div.page-contents div.description div.articles a article h3, body div.page-contents div.description div.articles a article h2 {
body div.page-contents div.description div.articles a article h4,
body div.page-contents div.description div.articles a article h3,
body div.page-contents div.description div.articles a article h2 {
margin: 0px; } margin: 0px; }
body div.page-contents div.description div.articles a article div.article-up-part { body div.page-contents div.description div.articles a article div.article-up-part {
height: 12em; } height: 12em; }
@ -683,63 +439,58 @@ body {
body div.page-contents div.description a.suscribe-category-rss img { body div.page-contents div.description a.suscribe-category-rss img {
width: 40px; width: 40px;
height: 40px; } height: 40px; }
body div.page-contents div.open-browser-container {
display: flex;
justify-content: start;
width: 100%;
margin-left: 0px;
margin-right: 0px;
padding-left: 0px;
padding-right: 0px;
background: #f2eb8c;
color: blueviolet; }
body div.page-contents div.open-browser-container a.open-in-browser {
text-decoration: none;
display: flex;
justify-content: space-between;
width: calc(100% - 20px);
align-items: center;
margin-left: 10px;
margin-right: 10px; }
body div.page-contents div.open-browser-container a.open-in-browser img {
display: block;
height: 2rem;
width: 2rem;
margin-right: 0px;
margin-left: 0px; }
body div.page-contents div.open-browser-container a.open-in-browser span {
display: block; }
body div.page-contents div.open-browser-container.android { body div.page-contents div.open-browser-container.android {
display: none; } display: none; }
body div.page-contents div.easter-egg {
display: flex;
justify-content: center; }
body div.page-contents div.burguillos-logo-container.active {
border: solid 1px black;
border-radius: 50%;
filter: invert(1); }
body div.page-contents div.burguillos-logo-container {
padding: 40px;
width: 120px; }
body div.page-contents h1 { body div.page-contents h1 {
text-align: center; } text-align: center; }
body div.page-contents div.footer p, body div.page-contents div.footer p, body div.page-contents div.footer h1, body div.page-contents div.footer h2, body div.page-contents div.footer h3, body div.page-contents div.footer h4, body div.page-contents div.footer a {
body div.page-contents div.footer h1,
body div.page-contents div.footer h2,
body div.page-contents div.footer h3,
body div.page-contents div.footer h4,
body div.page-contents div.footer a {
font-size: initial; } font-size: initial; }
body div.page-contents div.footer a.suscribe-category-rss { body div.page-contents div.footer a.suscribe-category-rss {
padding: 7px; } padding: 7px; }
body div.page-contents div.footer a.suscribe-category-rss, body div.page-contents div.footer a.suscribe-category-rss, body div.page-contents div.footer a.suscribe-category-rss > img {
body div.page-contents div.footer a.suscribe-category-rss > img {
width: 20px; width: 20px;
height: 20px; } height: 20px; }
div.easter-egg {
display: flex;
justify-content: center; }
div.burguillos-logo-container.active {
filter: invert(1); }
div.burguillos-logo-container {
width: 120px; }
div.search-overlay div.search {
width: calc(100% - 60px);
height: 80px;
margin-left: 0px;
margin-right: 0px; }
div.search-overlay.active {
display: flex; }
div.search-overlay.default {
display: flex; }
div.search-overlay.default div.search {
width: 100%; }
div.search-overlay.default div.fake-text-box {
width: 100%; }
@media (min-width: 450px) { @media (min-width: 450px) {
body div.page-contents table th, body div.page-contents table th, body div.page-contents table td {
body div.page-contents table td {
font-size: 20px; } } font-size: 20px; } }
@media (min-width: 768px) {
body converse-muc-sidebar {
display: flex !important; }
body converse-muc-sidebar.hidden {
display: none !important; }
body div.converse-container {
margin-left: 15px; } }
@media (min-width: 694px) { @media (min-width: 694px) {
body div.carousel a { body div.carousel a {
font-size: 20px; } font-size: 20px; }
@ -753,11 +504,37 @@ div.search-overlay.default {
body div.page-contents img { body div.page-contents img {
max-width: 694px; } } max-width: 694px; } }
@media (min-width: 700px) { @media (min-width: 1100px) {
body nav.mobile-foldable { body nav.mobile-foldable, body nav.mobile-foldable.show {
left: -100%; } display: none; }
body nav.mobile-foldable.show { body nav.mobile-shortcuts {
left: 0; } } display: none; }
body div.search-in-page.active {
display: none; }
body div.page-contents {
top: 0%;
left: 5%;
height: 80%;
width: 90%;
border: solid 1px black; }
body div.page-contents div.description.open-browser-container {
margin-left: 0;
margin-right: 0; }
body div.page-contents div.description {
margin-left: 10%;
margin-right: 10%; }
body div.page-contents nav.desktop {
display: block;
height: auto;
height: 60px; }
body div.page-contents nav.desktop a {
display: table-cell;
height: 60px; }
body div.page-contents nav.desktop a img.index-image-menu {
height: 40px;
width: 40px; }
body div.page-contents.no-carousel {
height: 100%; } }
@media (min-width: 1333px) { @media (min-width: 1333px) {
body div.page-contents div.description div.articles a { body div.page-contents div.description div.articles a {
@ -768,24 +545,6 @@ div.search-overlay.default {
body div.page-contents div.description div.articles a:nth-child(3n+1) { body div.page-contents div.description div.articles a:nth-child(3n+1) {
margin-left: 0%; } } margin-left: 0%; } }
@media (min-width: 848px) {
body div.page-contents div.description div.articles a {
width: 30%;
margin-left: 3%; }
body div.page-contents div.description div.articles a:nth-child(2n + 1) {
margin-left: 3%; }
body div.page-contents div.description div.articles a:nth-child(3n + 1) {
margin-left: 0%; } }
@media (min-width: 1333px) {
body div.page-contents div.description div.articles a {
width: 22%;
margin-left: 3%; }
body div.page-contents div.description div.articles a:nth-child(3n + 1) {
margin-left: 3%; }
body div.page-contents div.description div.articles a:nth-child(4n + 1) {
margin-left: 0%; } }
@media (max-width: 200px) { @media (max-width: 200px) {
body { body {
font-size: 20px; } } font-size: 20px; } }

View File

@ -1,5 +1,5 @@
$background: antiquewhite; $background: antiquewhite;
$background-page: #fefefa; $background-page: #FEFEFA;
$color: #2f4f4f; $color: #2f4f4f;
$color-page: #666362; $color-page: #666362;
$background_div: blueviolet; $background_div: blueviolet;
@ -11,198 +11,13 @@ $primary-secondary: #590e11;
$background_sidebar: $background-page; //#F5F5DC; $background_sidebar: $background-page; //#F5F5DC;
$color_sidebar: #dcdcf5; $color_sidebar: #dcdcf5;
$attribution_font_size: 0.8em; $attribution_font_size: 0.8em;
$tooltip-search-background: #390384;
$font_size_brand: 2em;
html { html {
height: 100%; height: 100%;
touch-action: none; touch-action: none;
} }
#url-copy {
width: 0;
height: 0;
opacity: 0;
}
body nav.mobile-shortcuts {
div.search div.fake-text-box input[type="text"] {
position: absolute;
top: 47%;
transform: translateY(-50%);
}
div.search {
a.search-icon {
margin-top: 0px;
}
}
}
a.brand {
text-decoration: none;
color: black;
margin-top: 0px;
margin-bottom: 0px;
font-size: $font_size_brand;
width: fit-content;
height: fit-content;
margin-left: 5px;
img {
height: 0.8em;
width: fit-content;
aspect-ratio: 1 / 1;
}
}
body.aliexpress-redirection {
background: azure;
}
div.warning-aliexpress {
display: block;
overflow: scroll;
background: white;
width: calc(90% - 100px);
border: solid 3px black;
border-radius: 20px;
position: absolute;
left: 50%;
transform: translate(-50%, -50%);
top: 50%;
height: 80%;
padding: 50px;
max-width: 874px;
h1 {
margin-top: 10px;
text-align: center;
}
div.buttons {
width: 50%;
max-width: 409px;
min-width: 250px;
img {
width: 100%;
}
margin-left: 50%;
transform: translateX(-50%);
a {
font-size: 0.8em;
display: inline-block;
margin-top: 20px;
border-radius: 10px;
padding: 10px;
border: solid 3px black;
text-decoration: none;
font-weight: bold;
&.buy {
color: #5C25A0;
background: #a9d9ab;
border-color: transparent;
}
&.back {
color: #732EC8;
background: #ff958c;
border-color: transparent;
}
}
}
}
div.tooltip-search-promo::after {
content: " ";
position: absolute;
top: calc(100% - 3px);
left: 50%;
transform: translateX(-50%);
margin-left: -9px;
border-width: 9px;
border-style: solid;
border-color: $tooltip-search-background transparent transparent transparent;
opacity: 80%;
}
div.tooltip-search-promo.hidden {
display: none;
&::after {
display: none;
}
}
div.tooltip-search-promo {
background-color: $tooltip-search-background;
padding: 10px;
border-radius: 5px;
width: 200px;
text-align: center;
color: white;
font-size: 14px;
line-height: 18px;
position: absolute;
z-index: 100;
left: 50%;
bottom: 115%;
transform: translateX(-50%);
opacity: 80%;
p.exit {
display: block;
position: absolute;
top: calc(0% - 5px);
left: calc(100% - 15px);
transform: translatex(-50%);
}
}
div.open-browser-container {
display: flex;
justify-content: start;
width: 100%;
margin-left: 0px;
margin-right: 0px;
padding-left: 0px;
padding-right: 0px;
background: $color_div;
color: $background_div;
a.open-in-browser {
text-decoration: none;
display: flex;
justify-content: space-between;
width: calc(100% - 20px);
align-items: center;
margin-left: 10px;
margin-right: 10px;
img {
display: block;
height: 2rem;
width: 2rem;
margin-right: 0px;
margin-left: 0px;
}
span {
display: block;
}
}
}
body { body {
summary {
h2,
h3,
h4,
h5 {
display: inline;
}
}
converse-muc-sidebar {
display: none !important;
}
div.converse-container {
width: 100%;
height: 400px;
margin-left: 0px;
}
div.page-contents div.footer p.attribution { div.page-contents div.footer p.attribution {
font-size: $attribution_font_size; font-size: $attribution_font_size;
a { a {
@ -226,136 +41,55 @@ body {
margin-bottom: 0.15em; margin-bottom: 0.15em;
} }
div.tutorial-overlay-step-1 {
position: fixed;
display: block;
width: 100%;
height: 100%;
background: rgba(100, 100, 100, 0.5);
top: 0%;
z-index: 999;
& > .explanation {
position: absolute;
left: 10px;
color: aquamarine;
background: rgba(100, 100, 100, 0.5);
width: 230px;
text-align: center;
border-radius: 10px;
border: solid 3px black;
font-size: 30px;
top: calc(100% - 80px - 203px - 90px);
}
& > .arrow {
position: absolute;
left: 90px;
top: calc(100% - 80px - 203px);
display: block;
}
&.hidden {
display: none;
}
}
div.search-results > div.description {
display: flex;
align-items: center;
flex-direction: column;
background: #2160c4;
border: solid #9dc1fa 0.3rem;
color: white;
font-weight: bold;
border-radius: 20px;
width: calc(100% - 20px - 0.6rem);
padding: 10px;
}
div.search-overlay.default {
div.search-results {
height: calc(100% - 80px - 37px);
}
}
div.search-overlay { div.search-overlay {
overflow-y: scroll; overflow-y: scroll;
display: none; display: none;
position: fixed; position: fixed;
height: 100%; height: 100%;
width: 100%; width: 100%;
overflow-x: hidden;
background: white; background: white;
z-index: 3; z-index: 3;
top: 0; top: 0;
flex-direction: column; flex-direction: column;
&.active {
display: flex;
}
div.search-results { div.search-results {
height: calc(100% - 80px);
overflow-y: scroll;
margin: 7px; margin: 7px;
img { img {
width: 75px; width: 75px;
height: fit-content;
} }
div.search-result { div.search-result {
div.row-title-url-image { div.row-title-url-image {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
overflow: hidden;
img { img {
aspect-ratio: 1 / 1;
margin: 10px; margin: 10px;
} }
} }
a.search-button-buy-now {
display: block;
margin: 30px;
margin-left: 30px;
margin-left: 10px;
padding: 20px;
border-radius: 10px;
background: #717ab9;
color: white;
font-weight: bold;
text-decoration: none;
}
p.product-vendor {
font-size: 10px;
color: cornflowerblue;
}
div.search-result-content {
background: aliceblue;
width: fit-content;
padding: 20px;
margin-left: 90px;
margin-right: 20px;
p {
}
a.expand {
color: white;
background: #717ab9;
text-decoration: none;
border-radius: 10px;
padding: 10px;
}
}
} }
} }
div.bounding-search-bar { div.bounding-search-bar {
position: fixed;
top: calc(100% - 74px);
margin: 7px; margin: 7px;
width: calc(100% - 20px); width: calc(100% - 20px);
border-radius: 10px; border-radius: 10px;
height: 60px; height: 60px;
display: flex; display: flex;
a.up, div.search {
a.down { width: calc(100% - 60px);
height: 60px;
margin-left: 0px;
margin-right: 0px;
}
a.up, a.down {
display: none; display: none;
} }
@ -381,21 +115,17 @@ body {
display: flex; display: flex;
a.search-icon { a.search-icon {
position: absolute; height: calc(100% - 28px);
top: 50%;
transform: translateY(-50%);
height: 30px;
align-self: center; align-self: center;
margin: 7px;
display: flex; display: flex;
background: aliceblue; background: aliceblue;
align-items: center; align-items: center;
margin-top: 4px;
margin-left: 7px;
padding: 7px; padding: 7px;
border-radius: 10px; border-radius: 10px;
border: solid gray 3px; border: solid gray 1px;
aspect-ratio: 1 / 1; aspect-ratio: 1 / 1;
width: fit-content; width: auto;
img { img {
height: 80%; height: 80%;
@ -412,8 +142,6 @@ body {
font-size: 30px; font-size: 30px;
width: 100%; width: 100%;
height: 70%; height: 70%;
margin-bottom: 10px;
margin-left: 70px;
background: none; background: none;
border: none; border: none;
outline: none; outline: none;
@ -421,13 +149,8 @@ body {
} }
} }
p, p, h1, h2, h3, h4, a {
h1, font-family: 'arial';
h2,
h3,
h4,
a {
font-family: "arial";
} }
*.android { *.android {
@ -462,11 +185,11 @@ body {
width: 100%; width: 100%;
a { a {
position: absolute; position: fixed;
top: 0; top: 80%;
border: solid 3px black; border: solid 3px black;
width: calc(100% - 6px); width: calc(100% - 6px);
height: calc(100% - 6px); height: calc(20% - 6px);
left: 100%; left: 100%;
transition: left 1s ease-in; transition: left 1s ease-in;
@ -485,17 +208,15 @@ body {
align-items: center; align-items: center;
text-decoration: none; text-decoration: none;
&:hover, &:hover, &:focus {
&:focus {
background: $background_div; background: $background_div;
color: $color_div; color: $color_div;
} }
p {
margin-bottom: 1px;
} }
h4 {
div.promoted-tag, h3 {
margin: 0; margin: 0;
} margin-right: 5px;
} }
img { img {
@ -521,17 +242,16 @@ body {
} }
div.page-contents.no-carousel { div.page-contents.no-carousel {
height: calc(100% - 80px); height: calc(100% - 60px);
} }
nav { nav {
overflow: visible; overflow: auto;
display: block; display: block;
font-size: 25px; font-size: 25px;
margin: 0px; margin: 0px;
a.go-to-index img { a.go-to-index img {}
}
a { a {
padding-left: 10px; padding-left: 10px;
@ -542,8 +262,7 @@ body {
margin: 0; margin: 0;
background: $background_div; background: $background_div;
&:hover, &:hover, &:focus {
&:focus {
background: $color_div; background: $color_div;
color: $background_div; color: $background_div;
} }
@ -586,7 +305,8 @@ body {
left: 0; left: 0;
width: 100%; width: 100%;
opacity: 40%; opacity: 40%;
height: calc(100% - 80px); top: 60px;
height: calc(100% - 60px);
z-index: 250; z-index: 250;
display: none; display: none;
@ -599,12 +319,11 @@ body {
visibility: hidden; visibility: hidden;
position: fixed; position: fixed;
left: 100%; left: 100%;
width: Min(70%, 600px); width: 70%;
height: calc(100% - 80px); top: 60px;
height: calc(100% - 60px);
z-index: 500; z-index: 500;
transition: transition: left 0.5s ease-in, visibility 0.5s ease-in;
left 0.5s ease-in,
visibility 0.5s ease-in;
background: $background_sidebar; background: $background_sidebar;
& > a:first-child { & > a:first-child {
@ -664,9 +383,7 @@ body {
display: none; display: none;
} }
&:hover, &:hover, &:focus, &.active {
&:focus,
&.active {
.open-menu-icon-hover { .open-menu-icon-hover {
display: block; display: block;
} }
@ -678,18 +395,17 @@ body {
} }
nav > a.menu-expand > img { nav > a.menu-expand > img {
width: 40px; width: 30px;
height: 40px; height: 30px;
} }
nav > a > img.index-image-menu { nav > a > img.index-image-menu {
vertical-align: middle; vertical-align: middle;
width: 60px; width: 40px;
height: 60px; height: 40px;
} }
nav > a > img.index-image-menu, nav > a > img.index-image-menu, div.burguillos-logo-container > img {
div.burguillos-logo-container > img {
transition-property: transform; transition-property: transform;
transition-duration: 2s; transition-duration: 2s;
transition-delay: 2s; transition-delay: 2s;
@ -703,15 +419,14 @@ body {
div.search-in-page { div.search-in-page {
display: none; display: none;
position: fixed; position: fixed;
top: calc(100% - 80px - 60px); top: 60px;
height: 60px; height: 60px;
width: 100%; width: 100%;
align-items: center; align-items: center;
background: $background_div; background: $background_div;
z-index: 3; z-index: 3;
a.up, a.up, a.down {
a.down {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@ -747,31 +462,20 @@ body {
align-items: center; align-items: center;
width: 100%; width: 100%;
background: $background_div; background: $background_div;
height: 80px; height: 60px;
justify-content: start; top: 0%;
flex-direction: row;
top: calc(100% - 80px);
a { a {
height: 100%; height: 100%;
width: 80px; width: (100% / 6);
padding-left: 0; padding-left: 0;
padding-top: 0; padding-top: 0;
padding-right: 0; padding-right: 0;
padding-bottom: 0; padding-bottom: 0;
} }
a.go-to-index {
position: absolute;
left: 0;
top: 0;
}
div.search { div.search {
position: absolute; width: calc(100% * 4 / 6 - 20px);
left: 80px;
top: 10%;
width: Min(calc(100% - 120px), 500px);
height: 80%; height: 80%;
border-radius: 10px; border-radius: 10px;
} }
@ -780,7 +484,8 @@ body {
div.page-contents { div.page-contents {
background: $background-page; background: $background-page;
position: fixed; position: fixed;
height: calc(80% - 80px); top: 60px;
height: calc(80% - 60px);
width: 100%; width: 100%;
overflow-y: scroll; overflow-y: scroll;
@ -806,22 +511,19 @@ body {
background: $background_div; background: $background_div;
color: $color_div; color: $color_div;
th, th, td {
td {
border: 3px solid $color_div; border: 3px solid $color_div;
} }
} }
td, td, th {
th {
font-size: 12px; font-size: 12px;
} }
table-layout: fixed; table-layout: fixed;
} }
th, th, td {
td {
border: 3px solid $background_div; border: 3px solid $background_div;
border-collapse: collapse; border-collapse: collapse;
padding-right: 10px; padding-right: 10px;
@ -885,8 +587,7 @@ body {
text-overflow: ellipsis; text-overflow: ellipsis;
margin-bottom: 30px; margin-bottom: 30px;
&:focus, &:focus, &:hover {
&:hover {
//outline: red solid 3px; //outline: red solid 3px;
article { article {
background: $background_div; background: $background_div;
@ -899,10 +600,7 @@ body {
width: 90%; width: 90%;
height: 90%; height: 90%;
p, p, h4, h3, h2 {
h4,
h3,
h2 {
margin: 0px; margin: 0px;
} }
@ -955,70 +653,79 @@ body {
} }
} }
div.open-browser-container {
display: flex;
justify-content: start;
width: 100%;
margin-left: 0px;
margin-right: 0px;
padding-left: 0px;
padding-right: 0px;
background: $color_div;
color: $background_div;
a.open-in-browser {
text-decoration: none;
display: flex;
justify-content: space-between;
width: calc(100% - 20px);
align-items: center;
margin-left: 10px;
margin-right: 10px;
img {
display: block;
height: 2rem;
width: 2rem;
margin-right: 0px;
margin-left: 0px;
}
span {
display: block;
}
}
}
div.open-browser-container.android { div.open-browser-container.android {
display: none; display: none;
} }
h1 {
text-align: center;
}
div.footer {
p,
h1,
h2,
h3,
h4,
a {
font-size: initial;
}
a.suscribe-category-rss {
padding: 7px;
}
a.suscribe-category-rss,
a.suscribe-category-rss > img {
width: 20px;
height: 20px;
}
}
}
}
div.easter-egg { div.easter-egg {
display: flex; display: flex;
justify-content: center; justify-content: center;
} }
div.burguillos-logo-container.active { div.burguillos-logo-container.active {
border: solid 1px black;
border-radius: 50%;
filter: invert(1); filter: invert(1);
} }
div.burguillos-logo-container { div.burguillos-logo-container {
padding: 40px;
width: 120px; width: 120px;
} }
div.burguillos-logo-container.active img { div.burguillos-logo-container.active img {}
h1 {
text-align: center;
} }
div.search-overlay { div.footer {
div.search { p, h1, h2, h3, h4, a {
width: calc(100% - 60px); font-size: initial;
height: 80px;
margin-left: 0px;
margin-right: 0px;
} }
&.active {
display: flex; a.suscribe-category-rss {
padding: 7px;
} }
&.default {
display: flex; a.suscribe-category-rss, a.suscribe-category-rss > img {
div.search { width: 20px;
width: 100%; height: 20px;
} }
div.fake-text-box {
width: 100%;
} }
} }
} }
@ -1027,27 +734,13 @@ div.search-overlay {
body { body {
div.page-contents { div.page-contents {
table { table {
th, th, td {
td {
font-size: 20px; font-size: 20px;
} }
} }
} }
} }
} }
@media (min-width: 768px) {
body {
converse-muc-sidebar {
display: flex !important;
&.hidden {
display: none !important;
}
}
div.converse-container {
margin-left: 15px;
}
}
}
@media (min-width: 694px) { @media (min-width: 694px) {
body { body {
@ -1082,13 +775,56 @@ div.search-overlay {
} }
} }
@media (min-width: 700px) { @media (min-width: 1100px) {
body { body {
nav.mobile-foldable { nav.mobile-foldable, nav.mobile-foldable.show {
left: -100%; display: none;
} }
nav.mobile-foldable.show {
left: 0; nav.mobile-shortcuts {
display: none;
}
div.search-in-page.active {
display: none;
}
div.page-contents {
div.description.open-browser-container {
margin-left: 0;
margin-right: 0;
}
div.description {
margin-left: 10%;
margin-right: 10%;
}
nav.desktop {
display: block;
height: auto;
height: 60px;
a {
display: table-cell;
height: 60px;
img.index-image-menu {
height: 40px;
width: 40px;
}
}
}
top: 0%;
left: 5%;
height: 80%;
width: 90%;
border: solid 1px black;
}
div.page-contents.no-carousel {
height: 100%;
} }
} }
} }
@ -1116,51 +852,6 @@ div.search-overlay {
} }
} }
@media (min-width: 848px) {
body {
div.page-contents {
div.description {
div.articles {
a {
&:nth-child(2n + 1) {
margin-left: 3%;
}
&:nth-child(3n + 1) {
margin-left: 0%;
}
width: 30%;
margin-left: 3%;
}
}
}
}
}
}
@media (min-width: 1333px) {
body {
div.page-contents {
div.description {
div.articles {
a {
&:nth-child(3n + 1) {
margin-left: 3%;
}
&:nth-child(4n + 1) {
margin-left: 0%;
}
width: 22%;
margin-left: 3%;
}
}
}
}
}
}
@media (max-width: 200px) { @media (max-width: 200px) {
body { body {
font-size: 20px; font-size: 20px;

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

79316
public/dist/converse.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,371 +0,0 @@
/*!
MIT License
Copyright (c) 2018 Arturas Molcanovas <a.molcanovas@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
/*!
localForage -- Offline Storage, Improved
Version 1.10.0
https://localforage.github.io/localForage
(c) 2013-2017 Mozilla, Apache License 2.0
*/
/*!
* Sizzle CSS Selector Engine v2.3.6
* https://sizzlejs.com/
*
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://js.foundation/
*
* Date: 2021-02-16
*/
/*!
* URI.js - Mutating URLs
*
* Version: 1.19.11
*
* Author: Rodney Rehm
* Web: http://medialize.github.io/URI.js/
*
* Licensed under
* MIT License http://www.opensource.org/licenses/mit-license
*
*/
/*!
* URI.js - Mutating URLs
* IPv6 Support
*
* Version: 1.19.11
*
* Author: Rodney Rehm
* Web: http://medialize.github.io/URI.js/
*
* Licensed under
* MIT License http://www.opensource.org/licenses/mit-license
*
*/
/*!
* URI.js - Mutating URLs
* Second Level Domain (SLD) Support
*
* Version: 1.19.11
*
* Author: Rodney Rehm
* Web: http://medialize.github.io/URI.js/
*
* Licensed under
* MIT License http://www.opensource.org/licenses/mit-license
*
*/
/*!
2020 Jason Mulligan <jason.mulligan@avoidwork.com>
@version 7.0.0
*/
/*!
MIT License
Copyright (c) 2018 Arturas Molcanovas <a.molcanovas@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
/*! @license DOMPurify 2.3.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.3.6/LICENSE */
/*! https://mths.be/punycode v1.4.0 by @mathias */
/**
* @copyright 2022, the Converse.js contributors
* @license Mozilla Public License (MPLv2)
* @description This is the form utilities module.
*/
/**
* @copyright 2022, the Converse.js contributors
* @license Mozilla Public License (MPLv2)
*/
/**
* @copyright Alfredo Medrano Sánchez and the Converse.js contributors
* @description
* Component inspired by the one from fa-icons
* https://github.com/obsidiansoft-io/fa-icons/blob/master/LICENSE
* @license Mozilla Public License (MPLv2)
*/
/**
* @copyright JC Brand
* @license Mozilla Public License (MPLv2)
* @description A plugin which restricts Converse to only one chat.
*/
/**
* @copyright Shachaf Ben-Kiki and the Converse.js contributors
* @description
* Started as a fork of Shachaf Ben-Kiki's jsgif library
* https://github.com/shachaf/jsgif
* @license MIT License
*/
/**
* @copyright The Converse.js contributors
* @license Mozilla Public License (MPLv2)
* @description Converse.js plugin which add support for XEP-0206: XMPP Over BOSH
*/
/**
* @copyright The Converse.js contributors
* @license Mozilla Public License (MPLv2)
* @description Converse.js plugin which adds support for XEP-0198: Stream Management
*/
/**
* @copyright The Converse.js contributors
* @license Mozilla Public License (MPLv2)
* @description This is the core utilities module.
*/
/**
* @copyright The Converse.js contributors
* @license Mozilla Public License (MPLv2)
*/
/**
* @description
* Converse.js plugin which shows a list of currently open
* rooms in the "Rooms Panel" of the ControlBox.
* @copyright 2022, the Converse.js contributors
* @license Mozilla Public License (MPLv2)
*/
/**
* @description
* Converse.js plugin which add support for registering
* an "App Server" as defined in XEP-0357
* @copyright 2021, the Converse.js contributors
* @license Mozilla Public License (MPLv2)
*/
/**
* @description
* Converse.js plugin which adds views for bookmarks specified in XEP-0048.
* @copyright 2022, the Converse.js contributors
* @license Mozilla Public License (MPLv2)
*/
/**
* @description Converse.js (A browser based XMPP chat client)
* @copyright 2021, The Converse developers
* @license Mozilla Public License (MPLv2)
*/
/**
* @description Converse.js plugin which adds views for XEP-0048 bookmarks
* @copyright 2022, the Converse.js contributors
* @license Mozilla Public License (MPLv2)
*/
/**
* @description UI code XEP-0313 Message Archive Management
* @copyright 2021, the Converse.js contributors
* @license Mozilla Public License (MPLv2)
*/
/**
* @description XEP-0313 Message Archive Management
* @copyright 2022, the Converse.js contributors
* @license Mozilla Public License (MPLv2)
*/
/**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/
/**
* @license
* Copyright 2019 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/
/**
* @license
* Copyright 2020 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/
/**
* @license MIT or GPL-2.0
* @fileOverview Favico animations
* @author Miroslav Magda, http://blog.ejci.net
* @source: https://github.com/ejci/favico.js
* @version 0.3.10
*/
/**
* @module converse-carbons
* @copyright The Converse.js contributors
* @license Mozilla Public License (MPLv2)
* @description Implements support for XEP-0280 Message Carbons
*/
/**
* @module converse-chatboxviews
* @copyright 2022, the Converse.js contributors
* @license Mozilla Public License (MPLv2)
*/
/**
* @module converse-dragresize
* @copyright 2022, the Converse.js contributors
* @license Mozilla Public License (MPLv2)
*/
/**
* @module converse-emoji
* @copyright 2022, the Converse.js contributors
* @license Mozilla Public License (MPLv2)
*/
/**
* @module converse-fullscreen
* @license Mozilla Public License (MPLv2)
* @copyright 2022, the Converse.js contributors
*/
/**
* @module converse-headlines-view
* @copyright 2022, the Converse.js contributors
* @license Mozilla Public License (MPLv2)
*/
/**
* @module converse-minimize
* @copyright 2022, the Converse.js contributors
* @license Mozilla Public License (MPLv2)
*/
/**
* @module converse-notification
* @copyright 2022, the Converse.js contributors
* @license Mozilla Public License (MPLv2)
*/
/**
* @module converse-pubsub
* @copyright The Converse.js contributors
* @license Mozilla Public License (MPLv2)
*/
/**
* @module converse-register
* @description
* This is a Converse.js plugin which add support for in-band registration
* as specified in XEP-0077.
* @copyright 2022, the Converse.js contributors
* @license Mozilla Public License (MPLv2)
*/
/**
* @module converse-rsm
* @copyright The Converse.js contributors
* @license Mozilla Public License (MPLv2)
* @description XEP-0059 Result Set Management
* Some code taken from the Strophe RSM plugin, licensed under the MIT License
* Copyright 2006-2017 Strophe (https://github.com/strophe/strophejs)
*/
/**
* @module i18n
* @copyright 2022, the Converse.js contributors
* @license Mozilla Public License (MPLv2)
* @description This is the internationalization module
*/
/**
* @preserve jed.js https://github.com/SlexAxton/Jed
*/
/**
* Clears the specified timeout and interval.
* @method u#clearTimers
* @param {number} timeout - Id if the timeout to clear.
* @param {number} interval - Id of the interval to clear.
* @private
* @copyright Simen Bekkhus 2016
* @license MIT
*/
/**
* Creates a {@link Promise} that resolves if the passed in function returns a truthy value.
* Rejects if it throws or does not return truthy within the given max_wait.
* @method u#waitUntil
* @param {Function} func - The function called every check_delay,
* and the result of which is the resolved value of the promise.
* @param {number} [max_wait=300] - The time to wait before rejecting the promise.
* @param {number} [check_delay=3] - The time to wait before each invocation of {func}.
* @returns {Promise} A promise resolved with the value of func,
* or rejected with the exception thrown by it or it times out.
* @copyright Simen Bekkhus 2016
* @license MIT
*/
/*@cc_on!@*/

File diff suppressed because one or more lines are too long

11
public/dist/emojis.js vendored

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

View File

@ -1,90 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="192px" height="192px" viewBox="0 0 192 192" enable-background="new 0 0 192 192" xml:space="preserve"> <image id="image0" width="192" height="192" x="0" y="0"
href="data:image/png;base64,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" />
</svg>

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

View File

@ -1,310 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve"> <image id="image0" width="512" height="512" x="0" y="0"
href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAAAAADRE4smAAAABGdBTUEAALGPC/xhBQAAACBjSFJN
AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZ
cwAADukAAA7pAQ4zQhwAAAAHdElNRQfkAwMQJCYr1+EhAABC6ElEQVR42u29Z3QbV5omfKsKORAg
AgHmJFKUqGhlycqOsuXcPba77fFMz7ez05O+s/Fv/9iz5+zZc3Z2vx/z7U5PT7e73R5blqOsYAUr
J1IMIinmnEAkAkQOFfaHEklUFQqogEIBz9EfAYXivXWfet/3vulCBCiikAHnegBF5BZFAhQ4igQo
cBQJUOCQ5XoAwoBIxmKx5CPgWIIAgEAxAGAEAbAcgmA5gBVKpVKhVCqUCJTr4QoICROAQFE0iaIo
imHJaHBpKRSJRWPRaCSGJqM4IPB4EiJkChmEqGFIpoJkap1eq9PqtDqtWobIZHKZTCaTyaROBikS
gHj4L+Rxe9xut9cXXArEcBzDCYLACZwgCIIAABAEAABAEAAwABAEIAiGIRiGIRiS6wxmi8VisVis
Ji0CAASAZHkgPQLgwUW3x+3x+kPhSDQSiURjiRie6U2Uao1arVFr1BpdSam5rMxq1UrvSQEAAICk
4wgiIqFgMBQOul0ul9PlWcI4uSukN1vtNpvdatBqdVqt5HggCQLgGIphydD0+MT41Jw7+VDKczUx
CIIgCIKV5prq6uqaeotchsgQ6WyepEAA3D8zNjU1uxCKRKOxOMrTX0HUSpVKpS2rq29oqNUhuZ40
V8hzAqABp3PB6VhYcLt8EUGmojTbbHabrcxaZi9VSMA0zF8CELFwKOqZGhkZGedI3TMHVFrV2NBU
X67XaNV5rg3ykwAEQWDBkfs9fTOhZBJNZmzkswYsk8kRXVXr5o0tBhmA83iXmJcEQH3jo+MjDo/H
G83lMCClyWKxVjfUN5Trc/1Isp9EvhEgueR0L8yMjE3OJnI9lIew1DbUN9aW2UtVuR5JVsgrAuDJ
eGKhr719cAnjbpvHFhAEAX3tjt2bqlUKRf6FEfKKAN7Bznsj7mAwc88ez4AUep25euMzG2vzzk+U
NwSIzA+PTE1PTSyKdcCQuqq2oamxsVaXV/uCvCAAHvX7Jnra7jmF3u5lCpm1ddvmRqvBkD9+IvET
ACeSSwO3bgx4k0lc7IOFYJlcU799/x6LEsoTOSB+Asz3tj+YcS+Exf72PwakMpXXbtq+0S7P9UiY
DVfUBCB80xP93T3TsVwPJEPADRs3NddWV+SBSShiAqDxsLfv6uWpCBDvGKkAEYryZw7uqyhRiX1j
KGICzHVeaZ8JBZLiHSEdIERTYt1xdK9d5FJArAQITd7rfjDmyDfZvxJw+Zp16zc3l4nZHhQlAZIe
11jbxeFgrsfBART1u/ZtKTdpcz0OSoiPADgWn7585r4/gYpuaFkAQhBjy/NHW5UykYoB0RGA8N+6
1j0zHxDbuLIHrCmrbd2/tyrX4yCHyAiAzwx23703k+thcA3Y/Mz2LS0NmlyPgwRiIgAR9c/fPHcz
xHpIEAIjMAzDCARDEARDEHhYAEAQADwqDsAJHMMxHMeEmr+y5dhLTSUa0W0KRUQAPNx+9spcgH1q
H6wuNeh1Or1Op1EpFUq1CgYAVskJPJEAAIsn4tFwLB4NBZcCoWAwJJSHUWGs2P/KnhKB/hpjiIcA
zjt3uoenWeT0yo2m0lJjiV6v16lVSoVSoVTI5Qgik8khACAZQhAYBgCOYWgymUTRRDwWjydi4WAg
EAgEfD5/mO9HAVe2btqztUZcQkAkBEi6pjou3ljM6rewUqPVarQ6o8VqtZiNRqM2Iy980Of3+Rc9
HrcnHIlGwuEIj7sPuGTv4R11ZWre/kDmEAUB0OT8D990hDL2+UEIjCBISWVtbW1NnU0Nw9AjZHIT
gnhYL4gnvI65mcnJKVcMx3CMn8gjhJQ0vfFCi4gyh8RAAHTox0vDs5m7fSBVVX1tXZ1dr1GrNRr2
wTc0HotGomH/wvTk5MQ8TwUmkMresv+1BtEIgdwTIDrd3nbrQTzDcWisNrvNZi+3221ce9mIgNOx
ML/gcrsXXLy4otUNB3ZvbxJJtDjXBEj4hi99NZpRdrdMpdHoK1vWrWu08+hdS86NDw/2z4eikXiS
85sjG18+Vm8WRRpxjgkQnzh5rj/MXPlDAMht67duarEqFQoFn4lXBJZMJGKOgQe9Q7Mo4DoirdTV
Hj++SQzdJ3JKAGzw+tX702HmP5DbGpvW1JSXlRkEEqBxv8e9MD08OO7m2iRQ1G3Ye3ht7oNEOSRA
3NV/9WInYz8MorGWVTa1rG8UOuMSCw71DY4uuNwRbn1G8oaXDm2pynW6QM4IgMcmLv5xKMQswx+C
FTLT2l17N5jlECy43CRwIrHYd+vOoA/lNC8VUq174+0qbW4ziHNGAPeps/ecMYZ/XW7ftau1stSQ
u4eFh5YWp+7f6fByqQoglXXTG8/V5mpOD8eQEwIQ3t4rV/oYOv7UFY3NzWvX2pW5GOnyQcdmh4aH
B0fcXO4KNM/sP7TDkMNcgZwQIOpo/+7sEiPpLzcaa7ft3Vqdg1GSgRhvu9Y9vxTksDbNvO+9rVW5
MwZzQAAi2vOHy5NxBs8QglTVR57bZFIpcm0qPQGaCM3evnhnkbtUVVhpe/ntfYpcCQHhCZAcu3Cu
18mktlth27Z9Y211qQh2y8tAJF3TY+23ermrTkfKWw++3pAjt5DgBPD1XDrdxeCPwtrytZt3bRaL
7F8JtO9W+8iYizNFIK9748im8pwQXVgCEImlm3+45mXwRBTGlqPPbVCJtfcKjvtunrrhCnNlD0LK
gz992SzPwWyFJUC0/7MLU8H0/hS4+cCRFnuJSqTLDwAAeNA7dPH0KGe+IV3D/o825mCjIygBJm9e
uDqV/g8a1uzYurm5RPQl1uGhzrvtQ1wFDOX2gy/vFd4xKBwBiOjU+a/vpn1cMp11w6GXanO96WcG
rP/spWE3Rw0KIXjvO4cbhN4QCkeAUP//f9mRbvcEQ2U7395dkS8t+wksNH/6264oRwxAKg5/uFsl
7IZQKAIQ05dPdrjTaUyZ9dChzQ1GkeRKMALq6L1+apgjY1Bm2fjqG+WCTl8gnRMbuvj99bQGk23D
riNbTPnx8j+GrNpSa7veO8kJBdAFjzd4dJ1BwPELIgHw8OCnp8bSXCTTlT372mHR5c0zAIF2f/Pt
ZJQjr4DlrZ/s1ginBoQgAO4//Yc+T7pXpObl462m/Oqw9QTxhfufXPJx8yhh46633xFOBgigAuKT
353qTGMpyyx7Du1q1Qk2bY6hrDaWNF18kEFuEzXwxTsh92trhdoEI7/i+y8EH3z3cWea19+47ugH
rzbkx9aPFJCqrlEZCXLTujjmGIH0JQK5BfkmABG/9buP52lff0heeuQvP2xV5qf0f4KSdWvQmQQn
hgAe6vHYTcJEh/gmgO+z31/x0j+Vku3/5v2tZjFkyLICpLSsKZ/l5ugCPOoYBWajEMPmlwD4yDef
tXlp33+k6fm3X2sR0OzlDZDSVqWOLnHjGo46PHiJSYCnwicBiNj4if/zIEJ3iczQ/NOPnhNy38sn
IOMmddCbaZETOdDpmWSNnn8bnU8CxIb+14k5+iRK+4v//lh13kv/p5A1NMBTIW7u5Z+eq+Y/R4BH
AgTu/vqHWVr1L9v+k/d2mCS0/gBSmCq0Phcn98JDCx4F728HbzIG89358iTtuyCzbDr+XAu/0xMe
+q0GOc5NbAB1fBvGd1v4NQT4kgDE4qVff0dnD0Hyqpf+49HcpEHxCsRUZxwKcOMXTkwNV1j47SvE
FwHGT/72Hq1bRL3nz3/erJWA8Z8CSGcrn5/n5l5J3xBsL+HzKfFDAPzBt1/cp3WMlj//05cac5ED
JwBgfaUiOMdNZCDp8KKWEh43A7zcOjl94ssBmgcAyW0vfrAt95WxfAGxv6vwj3CUK3bPh765VsHf
WH/Fw01H//HrMTolqKz/q4/Wq6X5+gMAAIDUNls/g+RnRggMEZYK3obKBwHu/O77aToz2PzsX75c
r5Tw+gMAaS0qt4ObexGR+ZjBypcW4P6+sfuffu2g8YjL7PvePC7GpqmcAql4OxId4aaUGBv/Hoc3
8BQr51wCxAb+4fsFGvmP2N74xQtSOHY7DWBDubwnwv4+AAAAfJMxewU/ewGuCYDd+oerbjoDeMP/
826rtMX/I0CGkvgcV0cexGYCmjpeGMAxARKXPzlHF/2V7Xvv9TWi6I7FP2C9eX6eo60AEXEH1GV8
PDhuCRC+/0+n/NTvP1Sy+Rdv1Yim1JtvKMpxzyxXBaTBeW+VlYecKU5XI9n3324u0ch/3a5/v11k
xd68Qv56bHYsztHNFq9AsWPcawEuJQB+5deXPdTrD5uP/5vdpVJ0/lIBUpSqegNc3S3hiqirOS8a
4ZAAsdufnKJJjZbZj/38iPgOTOAXRtOUk5NcYQAAEfWGK0xcawHuCBAb/IezNEd7wxXP/f1u0Rf8
cg1IZZhNVxHDHKGFaGU5xyKUOwJ0/c8rbponUf3636zNp5o/jiCz+We5O/E+Posaq7kVolwZgUTb
Z5dc1BNV1L7x9vqCe/8BALDhefe8n6u7Ye6zsHIDp25UjiRAYuz3Xzqodzzyutc/2FZI5t8y2BRD
Hu4aSvk9WLWJyzeJIwJM/+OpSRpB1/TmXzUXmPn3FEpVv5v9XR5jaUphs3E4Om4IMPD5l5PU8R+k
8Scf1haM+ycFamP/DFfOAABAdBYpN3InTbkgADbz3b+OUks5edU7b28uRP3/CLAm6pji7na4L4A0
cFdFzcGLSfi+++I+9ddQxUsftnI3/zyE/MWxTi7PpOtGK5/jLEOEAwng/fFf7tF4vCuP/d2awpX/
AAAA6yKuOS47TAfGqznrosWeAMFbv+6kjnsj9rd+vom/jLb8AKQFdzkqFwIAAIB6Q/o1HClVtu8m
kej46kdqEwcue+m9vRxOPU9Rua/Zz03vgIdI/qiybePGHcBWAiQmfn2C5tgH68H/sKWA7b8nIJZm
PFzeD3UvbCjjZGPNlgAz/99ZJ+X6Q6ZX/npDHvf94A4yY+8QpzeM+uNlnBiCLFXA2NdnaHY4upfe
212g/r9VULVsvrfA4SkTgHB/bzLUc2Bcs5IAxNKp/z1F7QDSb/3bI4Vt/z+FLOoZ5pIAAPctyVs4
iK6zekET350co3Fzr/932wow/kcOaNezXO+Fer6+mt1x6yvAhgChu9+206z/zvf2mjiecx7D0tLE
sTWE9f+2k33OKQsC4GMn7i5RfiuvP/5annV95ReVu7nuhLP043c9rNVK9gQgZn48OUf9tend4/XF
DeAy2A9wLg8TJ0462XYly5oARPT0xzTlj7Yjb67jer75DfP2Cq4FIu7+4Xc+lvfImgDhM9/2UrIP
0u/5WUuhO4BXAbZt4LzGlxj+7iZLQzBbAiSGP75DfY6uasdbL+m5nm2+Q75rLef3jA2c6EZZBRqz
JcDQp53UCe/K+o9eK+r/1VBsa+T+psHTZ4ZYmQHZEYBwXf2Oxrdd9RcHpNL7kUMgdXXcl0XgS6e/
YNWnPjsCxK6epUkBsh9+Q5znPeYWkLKqjgfH6ODpy2zMgKwIkBj/4kfqCJDs4HtcVy9IBNUb+TCM
h/95kMWvs1qpud+0UbugFLuO7SpGAElRxQsBAl3f38/+19kQwHH5HHUbPMj+zn5t0QNIiopWNR+3
9X//oy9rj2DmBCASt7+coM5wsx18uZ6PWUoB2lorH5sjtO/87ayb0WRulaBj52lywJAdvywagJTQ
Nc1wEMBLxR1tY7aFN5lLgODnV6lzwOADb/Ij5qQBVSM/22N/x1fZ1iBnLAGW7p4bofxSXvnK0aIB
QA11A0/+EefXNTZdVg8+Ywkw8CnNkenml4/WFNefGqoGng7GjHaeu5dd5UGGEoCYv36eOv6k2vCn
kuv/zylUfEkAgJ03rrdms6XL8DfJi6c91DuOTW+uL5AWcFlCZjXz5SJz3TiVVXPizMYTHzpzm3L9
YeP+V4oGID1UNjNfKnL8xEg2zoDMCOD8tIM6BKA6cqS6mARMD8hm44sAga5r41n8LKMVC/Wenaae
W9nru4ohgDSATPzlyQZO2rJIwstoyfpPj1ObmuUv7jHzNjnJwGjkbZeUvH+lO/NeNBkQAA9d/47a
4whv+rCSr6lJB1BpKW/3JtC7X2eeIZgBAeKXrixQZwFueYHb7lUSRSmfrXJHzndl3JeUOQEI9/ft
1OuvPfoiTycaSAp8SgAA8PETI5n+hjkBPDdvOSm/1Gw/vL5oATIArxIA+M/d8WaYH8Z81QZ/N0v9
pf2jrTzOK3cgMBRNJlEM56jFD6Qt4ZMAmOeHaxmmiDLdBhLTNzupj7+w7dvDZe868SDkCoXiQKMx
2LlKclLKuesamQr0Zs3ezDzCjAlw+yLNSRAbXuO86iX3cE4vuFzuSDQBVCq9tcxmqzdwMEmZkqvu
4WQgFu9dfT4jM4MhATDnlTuUsgU27joqtR1AzO/uuNU78iTVCrE3bTq4rkzP+rBTmQrmtE/Aaoye
XM8HAfzfd1ITV3F0PxfvhohAJO9/d3U6GI8/WSvM6ev5du2R1+vZqgJEzS8BvHfarZmoY4YEmPtu
mPI7yPzidmmtf2Lu/KXu6ZV5bygaWVycf/DcvgZ2c5WpeN4teb+teDGT8TC6au5WB3UngNLdOyz8
zklgREbPnegh83kH+wYmPS81sAp5y9Q8EyB2fev2DA7mYUaAzi9pPEwN71fxOyWBgfWf+JiqvTd+
c37q37awkQEI3xIAX2y7/gJzk4wJATBHG00hiHX7Hj69W4IjMfjZ55TeFIKYPqV4dxuL2/OuAgBo
s+1mTgAmo0leux2gNlx2PM9bjkMugC+cOD1L40xJzn57YZZNPS7/D8vTcYt58jkTAvgudlH/3nTw
oKSyQLw3vqAvtUuOnLvE4kxgnJsDpWkxl0GSOAMC+O72UBNKd3QHb2luOUH/79Ke+t72pTP7nRyO
8roLBAAAsHjpAWNvE4PFm/2aOg0ImN/YwPt8BATh7uxM29c7OnhpIfu/IIAEILzXO5kGL9ITIPLg
GrUAMGzaaeV/QsKB6O3wp3907rMzWf8FPMm/BADYjZtMm5OnJ0DvdZpWZGuPSSsNDO/qYvDqLN2d
yjo6iCU4PDuEchrD7eMMjylKSwD89kXK8BWEtD4vrV5QieFRBi8osTQ6m+0y4ux6OjHF0JklZhem
I0C8/944dSVA63ZpHQaPOhyMgrXoWNanQBHCEGDqwhyzv5OOAKELfdQjVh7aKa1mYLEJZu8NMZ21
BECjAtgAAIT6Op2MLkxHgMUfRql/a96/SYjJCIeEg9kOn3BnVYYFAADxJbbNXZkhdKqP0XVpCOBu
G6HeUZqPNEusGyi6yKz9NuFnqGFTEebwDEk6RG91BZjImjQEGP2BhupVr0orCgQAFmG2SyfCWfoC
iXBIEA0AAObu6GQyGVoCEFj/FWoBoF27T2rnARAYw+VJZuvOCQYFsQEBAODeBSa+AFoC4H2dC9Qz
3XJEcu1AIaahGjjbkM5S1rojY4y3zTDoGUFLAPR6G/UtFDsOScwCAACSM4xryLM8C4cIBrP7YTZ/
a+Ymg6Pq6CZMeG73Uz+Cuq1NkvIBAAAArGW2sJBOm+VfEFAFANcPc+kvoiOA/+4wta2jOSLBbjBy
K7N0L8iUZQ4MIaAKAL474+ndWnQEoGWQ/nCzcFMRCsoqZgWOkN2apRHg8QgnAYDvbn/aa2gIQEzf
otYh2rWtRuFmIhSU1cwmBdVm2Q2TcDoFJAB6vSPtX6MhwFzvFLUJWHNYWpnAD4HYKhl121M01mYn
AXAnMwctN8Dudy2m29fSEKDnOo0GqXuep453uQXSup7BysrK12SZBRH1hAWUAERiKG0TYWoCJHvb
KX0AkLl1rSQbwsHbtzPYCBr312R3++RCxg0c2GH4fLptJ+V0kxP9c5RhC2TzVr2UUoGfAGrZZk8f
4Kx8KctuOLEp4dwAAAAA5u7MpdEBlASI/EiTHCvbs02S6w8g7cajaXd45i3PZmkAxWcEJgA23z5P
fwUlAUJXqLuNyMq3NEqTAACsfa8xnQh49r1sYyDxaYEJAILXJukvoCJAbKyfuuNUye4GyTkBn8xt
x588Q2sGKHe/tidbH3h02C/wdKJt4/RWJ9VCzt+miQNbX5RwRzjDz5NLU9RBe0Xjh89lvQEKjQjo
CAQAAJCcHHLY6QhN9d30NWphBVXukVQu+Eog5p/8bS1lSADZ9v++knUWRMKxkF1PdxbA+zpoU5DI
JQCBTXRRbyCrNpVJqhhoFeCaV7Vn786QSU6Z9eir+2xZT941yjRbn0P03H2OLsJFQYCpQZrqp+bd
0j4WDql7v6L8xpx/lR6AlOa6be9sZ9EQfX5AcAEAwHSfq5qGsuQEwNq7aUyH5u1ZRsPzBorn1h88
e2sawx73h4NhBFY17H9hh5FNGrRjKAcEwGc7S2h2thQE6KA+ihAxN9VKKxk8FRBSfrh1cnhgdMIR
xQEAiL6yvmltS7VZz0r3OQZzQADgvLYxUwIkp4aoYxaKTY2S3QM+hay0tH7z1KzDE40mgUKtt1RU
VZWymzcemXcJlBG6Ap5bb6+hmSjZh4F2mqagyn0STAQgg8Ju3wUAiMYghnlCaYCNTQtQGZyK2PDo
RursTVKR5r9JE7TU7Sysk0FVhhJuJF6yM5sTPThAvJ3Gq09KAG87dSaIfl2NtPcAqwHBWacAr0Si
M9vDHVkC7Rii/pKMAMHxaepMAPteSbWEEg6Edyj7thKsgA2N0Zz1SvLZeCdNgVTFPklmgvCPpf75
XJiAAADcPzFDaX2QEWCM5mgwpGZz8WCIrOC+K3Qc4ClmuiiDGyQEwMb6qFOB6lpMUg0E8wzXndwR
YKqd0gedSgDUMe6ibgy+cWNx/bMCPteftvsUb3D0UIb2UgmQ6JigvhO8bp2U40D8gZjo9wmYDroK
selJqthehgTQrckyH7rg0d2WEy/QIwQo+4WkEiDcS10PpG6slnociCdEu7tztAcAAAAQvkOVGpji
5EouTFK3BNDtlObRQLwjMfkgbQNSPhHppiJAigTw9tCkruu2leVyGvmLwJUJ9jdhgeTc+CK5CZJC
ABddq9TSjVLrCSIQln6cZn8TNkiMjZGroBQCuLuoCaCtrZZcTwhBEJ/sYd7AnRcQo4MMCbAwQJ23
VrNFkvVg/GP8euanOnM9hBFGBCBmxkLU29XarUUBkBUGf8idE+ghiLlxck/AagKMDNMkEdduLBIg
C2ALXX0CdQekBuqYJh3DKgLgIyPUgcOS2toCSAbjHskbbaHceQEfw9dDKoVWS4CxMcqhylpqil7A
bBC50JHrIQAAFntJ4wErX2nCN0tdESZbl2VflAJHsLOHQbs23rHYTUqAlRIgNuGmvoOsRWqdYYXB
/JnszxfhEMEx0p3oSgKE+2hKQhVN5bmeRF5i4pwr10MAAADgnyBjwEoCRB5Q+ysQWwWLqqjCRd/V
2VyUg6QiOUiW7L+KAP3UBChpklxrYCEQv8GoZ7MASPaTEWClEegbpy4KL91QTAbMHInRa4xPcOMZ
2AhZRHCFBPBP0EQCiwTIBv4TYll/gE6RpaWvIIBzlMZhVdpaJEDGiA5cnMz1GB6DiLpIkj1XEmCE
Om0JsVUV/cAZY+L8cM6dwE/hmkpd3xUEcI1T2qtQZV1xD5ApCLT9i9zlgqfCNZaWANQSoLaxmA6c
KbBbl6fFsQV8CNdY6miW7QKIuNtDGQqE6ooEyBS4+/R1ESkAAJz0EgCbd9JkLtfUFSNBGcJ/81KO
CsIpsDiVWvS5nADjNNWrsvKKIgEyxND/Gc71EFYC96a2qVtGAHSCui0EYrPIigTIDD2nuoVuDJsO
4bEUm3S5BKAhgLK22BUgM+BLV077cz2I1SBpVbvMCESnqGPBygZjrgefZ4jeu9ST6zGkDmqUTgLE
HNSO4CIBMgQx/9vbuR5DKuKTKUv8lABJF00gQLmmqAIywtgXN9zs78I1SNrVP1UBoSmasKW6rhgL
zgCE/8ofc9QQiBaom0YFhKdpOgMZ7MVAQAZIfP/5qKhcQE8G5llaFZx8SgA6CWCo1uR66PmE0O1v
2tKf2ZkLEK7V6WnLCUAtASwNxbYAzIGNfn5X4NPBmCL14MplNgCNCjAXCcAc+NSlr8SRBkoCl4ua
ADPUBDDVFQnAFNjiV7/JcSkwNWgkAOYLUOcumWqKNWFM4fv8yyGxZIGlgMYG8HtpQoEGe5EADOG+
/Pt7ol1/ANyrs8IeE4BYpD7XHEIMxmIyACMQ0Sv/vT+X7cDSjs+zqgPUk4Vd9FITwFJajAQyA/r1
vzxId1xzbhFaWLlBfUoAagkA24udgZghcPHzG1ERKwAAQHgVAR7rdsJLQ4CyYiCAESKd/3gz161A
0iHqXpkT8sS4K0oAtiDwi7+55c/1KNIhRkUAr5uaALYiARggfOaz60vilv8AgKiHnAC4j7qPVZEA
TOC+/ZvbYksBI0HUs3KT8pgA8QB19AK2FW2AdMADl/7HgNj1PwCUNgDmp0kGUFiLVYFpgPv+9bMH
IikDpwcFAVAv9egRkz7XoxY74hM/fHZPxP6fZYh5SLeB6CI1AdQVxf6gtCCiw2d+PZ3LbvAZAPev
jPk9VgGL1KFAlb1IAFokb/3rGU+erD8ASV9yeWiXgQRQWovpYHRwXvzmthgTACmALYaNy/77hADU
EkBhLhKAGujM5U/viakGPB0wb8i47L8MCKAsLWaDUIGIzn5yclyU+Z9UwH0r4oFPbABqFVCUANRw
3fqsbV5MLQDSgwiuWOrHEsBPIwGKBKAA1nfl/PU88P6tAB5aIbAeEQAPUjsCFZYiAciABUY+Pz3E
/j4CgwiTEQCjIYDSVCQACQjX5d/05fwgkMyBkxMgRE0AlaGYD5aK4K1L1/oiog/+pYIgVQEo9VmB
kK7oB1oNYmmy8/zNWfY3ygHIJUCcWgCUGIsJgSuBo4H2r0/5xFn8lRZEeIW9/5AAaJDak6kvEmAV
Qve/aBtbzBvf7yqQqoBEmIYAhiIBlgFb6um8c9uZX3v/5SBVAfEwtTWjLQaDn4BA/XN9Z26I4gSQ
rOdAJgGSEWoJoNYWJcBDECA6e/5cZyCvPL8pwCNkBIhTSwCVukgAAAAAuKf3dtfwnD8Pt34rgMWI
ZSv6kABYgnpWymKTaAAA8C9M9bd1TOav7n+KZELxlAGPdgG0BCh4CYAlY4G+q1cHAyDf334AAAA4
Kl9NAIxmT6sqeAmAe/tu3pnyLsUlsfwAYMsLhBmoAFUhSwAiMTM6Oj42kl8xf3pgy9NXiyqABkR8
yTl9v/2+Q0KrDwDA0WWrnV4CFK4KIOLDVy90+9Ekxv5eYgKJCkDjRRWQiqnTlx84AxJbfQAAnqoC
VgiFVVAWZotAItlz7lR/PhR7ZQwsVQUQNPZtgTqCYkMff+GR3tsPAKkEoNvfKgsyHQAd+2+X3fka
8EsDMglAfTWsKEgBMPDxVSf7u4gTJEYgDQOQQmwQRzgvnhBht3eOsEIFpE33QwpRAMTPfOvIj2Lf
bIBjGRiBEFKAGaGR3tPt0l1/AC1/p580iqS6uhAlwNwXHeJu9scO0PI1fUQAahsAzn8CEHhmURzP
7ZPTuR4zn4CRZf95qAIgymWG8p8AaCShyiir6fJvXRKJ+5GDhAAwtamfzwQg/K6FhQWnJ2Hc9EoZ
03nEe3/okFbwZzVgOCUjCFFQS4D8NAITocBSwD8/OzMz4wwS6q0lhyzMfki4v7mRb/WeGYJEAiBy
yvcj/4xADMOw+MLgQP/QVAwjcBwnQHTgM/uzzH692PZd/hV8ZoYV73RaAuSdCsCcIwOj485gMBh+
GuMM93sZ/vz+P03megZ8g1QCUF2cX0ZgcnF+dnZqcmrOvardAcYwlxvvPXNbkhHA5YBlqTaABCQA
FguF3AP3uwZ8ZD4cZmY9sXT6TEjSOwAAAJCldgmjMQLzxBNIQP7em3eHA9F4gkUMN3D14qDk1x/I
VRlIAILIhweC+3rvD4zPOFh268JH/9CTD9NlCUUqAeRKSkGPij4oji7Nz4x03puIsV670XPXmNqK
+QzF8o4vjwigoRL0hMgzIgk06ew4f2scxViLKiJ26ZN8aviXLeAVFv9DAig0lCqAjUoVAPHBKzcG
XZzUa8bOnxuXcAzwMSDVipZPjwigpZYAIlYBuHuoq6drLMiJ3kZnvr2bp00/MgKkJpEASm0eSoBk
YK7zwhUXVy+t44J0k8CWA1KREAChtAEAKlICEMTMpc+GfHGuhhdv+99zuZ6TICBVAUBF6QrExakW
cc+VS3dHuWvTRlz9akzaMcDHgHXK5f99RAA5Ze43IUYJQDiGOi52cXhGe3L27OXCWH8A61es9SMC
wDoZ1ZuOJmUi8wbjMdeFr29EuLROvaevOnI9LYEAlawo9nxEAESvoCJAMim2xHDf7T90OziN2Uce
fDqQ61kJBZicAEYVVRokmhRXeXC85+qlOxwf0NjzWX+M/V3yA+QEkJVSGgEoSohIBRC+vq/ODnN7
T8x54ZTkY8BPQCEBqAmQFJNxhPnO/1Ofn+ObRr89J9UyQBJAmUqAmIhaYsdGvjwzwKn1BwAId3/f
XTjrD+ASsl0AYqQkQCQsGgL4ek99O8L5XSdOdku5DGQ1MrYBomJRj3j47udfcx+uc904kUeHvrEH
bFzR8SO9DRARS45U6MTJu9wnbBM/fOoVyQSFAWLSLv9vegkgFhUw893Jbj/nd43e/6FLCt0/mUO3
8iTwxwQwU272o6IgADFz+rf9PBzP7fzqjlhUnDBQmFaEAp4QwKKl+kVEDA8I837y6QgP0Xpv23dj
uZ6bsNCUrTwC7LGbV22QU3QKE4UEcPzTd3ysP7j7z/l58E/2UFlXBn4f5wEgRiPFL8RgBI6f/HKA
h/VHu87eKqQdIAAAqCkIAIxmCodv7lUA7jr9z6M8rD/h/+aCGMSboNCsIsCTSJ+JkgA5f0bB358Y
4cNSX7x8geOoQh5ARUEAqJSKANFcq4DZb77s40P/Y4OfFEAZ0GpobBQSoNREQYB4OLc5Qe4rv3/A
w/4PgOEfrhZCGcAqaMtX7gKe2ACUKgCEcmonJS590svHAIjImc/C7G+Td9BVUBDAQtlDJe7OYbp8
+OpXt3iJR4fPXJgQY7ojz5CbdCvX+TEBIHMZVeZXzJW7jID48L/e4qbuYxWS4191ooVnAUBmy6pl
fiIB5GY9hQiIOXNGAHzs+zP8ZOtPn78m3V6w1IDKylZ98rQgRFepJP9R7giAu8/8mpdyXSJ26zeF
uP4AWK2rXvOnBNBWUQQE465c2QCJb76a4aUuBbv07Xgh1AGmACpbbeo91QjaGgoC5MwGCHV928nL
jZNT398oyPUHkNW66pNlKqCaigC5UgHjv+vm5y87T10viDrQVKRKgGUqoJpSBeSGANNXLvCzTNHe
TwssBvwEMju1CtDVUhHAnQsCENHLXzr5Sda990XhlIGsBGI1I6s+ekoAVbme/FdEIBfxwHjP6Wu8
3BhbOHOqQNcfqGoNqz9a1hdAX06RFYQu5sBn6vvDHX5uHPzioreAygBWQNVYsvqjZQSQ1VrJf4Z7
hA+aeK7f5McDFOw69aDwPICPoKqjJUBdGfnP8IVFwYfa/9UUP6/pyJd9vMQW8wKqxhQVsMwzjNRS
EWBOaK8Z7rp5LsDHjQn3tS88Ak9GRFDX00kAhFICzAn9zLDvT/MSAgLYtycWC9UAAADoK1J2essl
QLVYJEBi4vJ9XpYp3PXD/QKMAT+GriLVzF8mAeCSshLSZmG4Q2AJ4Lt4n5+d5+zJeyKqdRYctjWp
vcBWrLi1ljQnAA94hX1sUycmOb8nAQBw3vp2Ssh5iA22ptT1hdNdAAAAwCfoOZoT14c4dzwQAADi
xh8Kqg44BfamNBLA3kzRLtA3LSABiI6zfq7viUdc4ejd03fE1O1EeNgaU9d3xStvb1KQ/9I3s02w
TlGY+85NzmO1ROhutfGzy4XrAQAAQApbeaqNt4IA1kaKZfbxk5dBiuilDh5c9diZ28giL66FvAFS
X0Fi469U+uYaF+nD900LV0MfvPiAj9v6fILNQKSQNZaTfLqSE9qWUtLf+mcFI0B4sKsws/V4h2xN
egJo1ptIfxt1CFYcMnmmQJN1eIesqYLk01UEWEdOABCaEioiPHau4GU1T9CtsZF8upIA6maKE3aj
w8IEBInprtHC3qrxBnWNjczPu/IzWWUl+dkhsUFhCIC33S2slk3CoXQTacbXKlIgaxrJCTAkzHlq
6L2OAg7W8QrzZiYEgJqayAkwLAgB4sODrgIO1vAK02Yd2cerCABTEABdcCYEWJnAjUnBH0yhoKyB
1Mu3WgLUNZInhydnZwUgwOKPhda0SyhA9joD6au92jCUV9ST14hOT/KvnBNT9wvh6NacoH4NQvp5
ys7AskFDdh0xPcG/BJgrrj9fgJrXk58MmPJp2VZSWwHMTPAvAUbvFGrFBu+QNTUzJcB20t0CMSdA
PGiiozBrdvkHUlZP0QIohQCaumrSpADMPcczA3D3+HwBZ2zyCs3GCopvUuWCYZ2d9MpF7vO0ViLZ
P54sOgH4gXZnOcU3qQRQbKsnvXKRp0zdJ0h2jAr8WAoHum12im9SCaDcVkd6pbeT54SaRGehVu3z
DtjWbKD6KuUTWV2djsxgXBrktzoAc04VdsoWjyhrMVJ9lbrUkJrcZ4A7J/18DjIwJHwJaqGgZgfl
iUBk73rDVtLs8GQvr1UVi93cnwhVxEPU7cyIAGu2k24EUX4J4L1fJAA/gHQNVPn+5ASwt5DmjiQH
+CXAQCH2bhYCsuYmHeXxz2QrDZVvJksNxKanlvhzB8fmZ4q5QPxAtmMd9ZekDuLS/TbSi2cGeFsj
YnpCyPLDgoJ821rqL0kJYNxL7jic6eXPVz87VfQC8gN57RoT9bekBFA1N5BGhHgkADE3XUwG5Ael
lF5AACgIABSbWsisBkc/f3ba3ExRAvAD6z4aAUBBAGTrRjICYAuDfG3V0Pn5IgH4QfmeUppvKbIE
WtaT1gf47/JUt4V53PEiAXhB2foaBc3X5ASASpvXkKUGBm7N8zPK+ESxIIwnbNqlpPsapvi87jCZ
GRjq5Kl9Y2K6GAjiCZt2I3RfUxGg5hCZ4iAWB/nJDU3MFv3AvEBWva4GpruA6kvDBtJuIURvLy8i
IDlfJAAvUG9fI4PoLqBkR8lessQgvLeHl7S9xFyRALxAd7Ce/gJKAmgPNZF8SkwPuflgQLKoAvhB
2c5K+gsoCaDYsJYshIRP9/DRLCTsLUaC+IBta42M/gpKAsDG1lay385f5+HwgORiTs8nli7WPKdL
cwWNhbh5P1likOMWDwSILBYLAnhB80FtmitoCNC0y0rybXRilPuAQMRXjATxAKRlsz2NBqAjgKb5
GbJc4kD7JOcjDRclAB+Q7X0m3frTEQDYXiazIGPXBzkfaVEF8ALt3k1pr6EjgPlQHcnXia4HAa4F
dlEF8AH9lrWGtBfREUBWta0h9VM8+KCH6z1b1F+UANzD8nx1+otodYRs/+AYiev/wdWNtAGmzBEP
cSUBILlapZAhMMAxNBGNFXS1adXhsvQX0RNgZ+fpcOojHLn9QXrRkhGSUW4WCoJ01etbqs06DREJ
eaYGB+bCRMFSoHJrE4Me/7QEgPQbdt5JddEkJtu0Zk7HmohwIgHU1du3rzGZS9QKGUATkYDXO9Fz
b7JQncxbj6bzAQCQhgAAtBwbJPHRuc+v5ZoAHLynsvqN2/Zsejwwpba0EgDfwIbb3ZOFmHAO67bt
kjO5kKAF3rGLhCLy5lMEp/i4gdFY6QBp1v/XngSKrxo/Gr//X9ZpILZ3zz+oD3zD6NGnkQBQxdHF
kZRPk/P3N9Zw+VCTUdYqwHDozzfbUmgEIUjzBxt+fdPP4WDzA9pXNjC6Lp2nyPByXyoBQOxuaw2X
o0XZZoRCmhd+dpS0vx1Q1ZgIzblwgTka5PV7mK0QnOZ79bYtZanX4B2dnJ6/hLN1A+h2//xlSpNX
e/xne5jYQ1JCxbMMtWo6AgDVrv2pUgKf7x0WU1t/pPk/HpBT6iQIOfL3jWmd4tJC83EjswvTEgDa
fojs7Rk64+dyvCw1wNrXt9B6JvRbftLE9F5SAFy+bTPDc/7SEgCUbSXrHTp9cZZDrUqwYgCEbH3V
SH+J+dXN8gLaCsB7ni1Nv7IPL01/Sd2bVakfhgfauTyGlZUEgCu2bE7jm1auf6augAhQcnQP09ky
IIDthWaSxxs81cvhiFkRQLZrQ9ppIM/sRJjcSxIwPrvZxPRaBgSQVR0l2VLG2rq5i+FCCJvXU/5M
c/qLWjczlIkSgPX1RsbXMnkqiuf2qlIWCPPc6+DMxYqwcgQqm6rSXgPZG0q4Gq3YoWk9yCAM+AhM
CCBbt2stSYFp2w+cNXeXqVi8nnCpTcHgMlOtYOdf5xibXihj/jgZXQk98zrJVnC2o58rb5BcyUIF
qOyMVlZbxXESg0gBKXe+mAHVmVGl4XBj6kuGT5znaiMgY0MApZmJAABqK6PL8h6KZ/Y2ZOD1YkYA
ZfNREs+y8/sJjgbNigCIlpF9Ly8pjG2A8Y3tmVzOUFmY3yXJL42OtHHEAJmKBQFgGaNJIMqC2Abo
1h9qyOR6hg9F2Xxwc+oLFPr+KjcbAZWe/8UhCiMeWP9mZh4vpg9edfC51Ggr1nahj5OYkMrAggB4
gtHSYrECYACk2fpyaUa/YPrgoc1H1qR0nCaSdz/h5BABtYGFfk4GGYmhxFIBZIbBOw7XZOZTYf7m
tb5H0m9w6uJtLo76UxtZSIC4m5EUijrFFMDmCernjmboU2P+4MtfIDlSEp042cNBPqeajQqIOxnl
/QYnpX8oof7ZfdUZmtPMH7yi8fnW1E+Dpy9x0ONVbWShAgjfPIPjrDDXnPQPJax+d12mP8ngzVO/
cUCdQi8ifO4b9g9WwzR6TQpsMP1BBsTksPQFgG3XIXumv8ngwSPVh59L9TES/RfaWZ8np7exydhK
tjGoV+7tkn754fZ3mAeBHiOTNw/a9kZ56vXR+19Osh25wqRi8Wu0py+YxhAhQl3dUt8FyuoOHcg8
3JGR6LU/u5+EYnNf3GQdE9CYWIgA3NWVLkk52tcxI3UCaF49oMtck2b2i8o/3Zj6IeH++Ae24lVh
Z5W3fe8zP/0Fnt93sxyh6KFsPJa+HUQqkF9lcrXC7J33pkhbwgXbbOxqu0KdrGo4QyGjnS4teOrU
Z5I/jqD+3RcZ54EtQ2YEAHJdqC/V6MeWYhtLWeVcRoeGWTmUwnOWGsqAEr546l9GpN6HUHvkl1XZ
7KUzJABkw0dIejoGAya7kc3wE3N9rBrRY4sepIUq3r/06R+7pe4DgI+8uysrQzpDAgBIp35A8q5G
nVUNbBLv8XA7u8gy6pt3lxrJLMl43+++fCD1PpSyyp8fN2T1/DMlANBbZhyp6hp1yMuqWXjzIOjG
ALtHEHeOJXFEvao1NhGZvPv158OcFjKKEabjbzVl9/5lTACgNC0MkXw8i21hEdRH1Fc6WT4DPNA1
HNbIIQxAAAIAEDiWiHt6vvyXc9LvQafY/B82Z7mPzpwAMmt0nqRjeCwYWWvMfgrwvQG2rymBLg5d
vz/pIxQKGAAC843cOf3HP96eiUnd/gfgmQ8OZJv0njlvIO0B1wyJ52f6VN0rDNqSUd3VXsH+RY1E
Zie7K8vNOqUCJGIB7/y8oxCOIoItB17KvmtXNh1dut8k23EqD/0+iGXbJAb/6lUOC7gRraYwMkAB
AADofno2++48masAAIDGNkQSf8PncEtV1v6gyGQnd6qaQFGpO36fQtn0d0eyd8Nl9drptx8PdaU6
BJM3lNbWLMtvoLo1XFbvSl/tP0Xdn2/XZP/rrAgAlb7sIzME3VdqFBuzXEdzldFVSMvGGcqPHLex
+HlWKgBAZUrXHInVHhkpq9VlyQD3PW8BZG1yDuUr729kE4fJjgAAmMr6nKkigIgtIJuyLMFbGp+U
ur+OB6i3fPA8m7KqrAmgKAUOEu89sRiU12SnkRKebj/Xj0fygGr+4jkrK+Mp671XyZsLjoVUGZDs
IiwHMytNeITSjQVTwM8dKo4er2N3h2wlAIC1BryXJMaW9DvMzVAWpFQqL41z/HikDkjxyt/Vs3Sf
ZE0AAJlUcx6STFvUHVXXZTMqvK94emRmUBx/fxebsloA2BAAyPTqGTJDMO6NVpmyqMXH3JMzHD8h
aUO94c+OlLD1nrAgANA2+B0ekr172J2osmcTGRzisvGY9NH84cvlrG/ChgBAXoc+IDvrIzots9oz
piZkfHCz6Apijppjv6hiX1XPigCQQY8Pk2zeiagbtRkztQMgxWQ/5+eRSRaw/rWft3AQP2NFAADM
ZTNOEo8g4fVC5RkzAAQWJJ+7yRn0+z88wkXEkyUBEH3F/CiZ3PaOKWxlmWoBJHSr6AxkBlXrf36W
k65nLAkA5BYkSFpzE5sCZeYMVZQ+/iMX3QYKATv/en9W7rYUsCUApDLJZsh6b+B+H2ovySxMASX7
FiSfv8kFkM0/fdvETVsltgQAwGDBZ7xkWsA9Iy/PcJRYaNjFybSkDaT8o7c52AA8vNevWN9CXxdw
LpJ9ERpV2jKrV5Zp20e5mZekUfmnb63lqq0aBwSAtWXxKbJjv/CwM24uzWQvINP0jxZ1QDpUvfTh
Ws66nnJAAADbdaFZMvOdcLsxsyGTscr8jomiM4gWcOkL7+9g005hJbggAADl1eNu0jfXOxqxV2YQ
G4Q0njuSL+Ngh5JDHz7P+pjNp+CGALChxjVFmtAVm13S1DF3WEBGbztnJ4lLEqZ9f72Py7733BAA
KOzqyDSZF48IeQJaK3OJBUXnp4pWACWgkr0f7TdyeUeOCABk9YZpH2knxuCcx17G3GklAx1FZxAV
IM2u99/Rsb/PMnBFACAraxhzkKrvmGNa3cz4UCCt9u5sMTuYApqNv3xNzWX9BIcEACpzaYDcgk+4
XdFaxryVLc1zeSCdlKDe8ldHLByffscdAYCiVu51kUbz4o45pYHpeQ1QyWRfcSdIAki97U9+YuX6
rhwSAFJWlQ34ScU36rkvL9czUwOIdXYgWNwIpEKz4aMP9ZyffskhAQBQmasc5N248PCY287sbB8A
YcH+YlpACjStf3/MxP3pp5wSANKUayKzpJYgsbTgVxmZGQIl2N2lohJYBc22j46xqQGkAqcEAJC6
QTfvJ+/LHxwOaa1qJjEMlXzcUUwMWQFIs/XdD7JpA5gW3BIAQIqKhnFySxBgk1PJNVomQkxhfFBM
EF8BzYZfvpNt1S09OCYAgFSW8jC5Vxigvtn50jIGmwGFYXKadQdyKcGw85dHud7/PQLXBACQqk4T
WiDXAknvRFRhSH98G6Qk3ENFK+Ax4NJ9779m5unmnBMAQLK6iikf+ekMeLhvzmTSpGdAeaA9WmTA
Q0CG/X/2Nsf+v6fgngAAyM0tS1RWHLrwIGJJe6wFpMQDBXDEDzOUvfRvD2j4Wn9eCACUdiviDZPH
9ZOLTi8oTxsc0mp6XUVvEAAAVL3w4Q4eC+d5IQBA6spj7iA5A3D3mMuoVaXJFFOb5ucLocdfOsgq
X3r3EIseUGnBDwEAsLYkXFRnSsZmO2GrEaaXarKKmT4e550vqPzow10y3uQ/4I8AsK7WFJ+jyO5K
+icmE9X0eS2IMexaKHglsPXP32xi1QIoLfgiAEDMdu3SIsVhnfjinCuhKaGLDkEyLdob5nPq4odm
97tvNnBSAEYN3ggAgKHa4nYnKTZz0enepEmroNsQmtWjrkLeCUCGzX/zVjnfLW95JABQVjaB0QQF
A4jQ4AOsgrbHsa5icJrn6YsZhgP/aR8P4b9V4JMAsKrMrlugiu3jEfe8C7bSnDOiNEU8BZscJK99
/cO9Rt7Xn1cCAEhR0ZAIBamC+wnH6CKCqKmzBBTm8EC8MB2C6sZXPzjIWfkPDXglAABwyTYtRZ4Y
AICIDLf5TWUwVeUIbIW9c4VoBkDyjT/7xTr+X3/AOwEArK6sxJxU0X0CC80OuK0llF6h0tIBdwFW
Cmnf/MWLFRyen0ADvgkAgK7MIg/5qAQ5Hpyd9UfVVM0OVGbc6RDkQYgIstrXfrbfLtCJF/wTAKjr
mmXOKEpFAczdOUmUyuTkO0JV89JkupOhpQVI03Ds77ZyW/1BAwEIACBDc6PDG6f8Hvf09cms5AEP
SGVDuqh/KkGodv7FR1VCmH8PIQgBEL29ShHwU77IaGBhZiJkVJNJPcioi80XkEew+s33j2Z1BmyW
EIIAAAB1kwUJBqiTveMzw3MooSQLeyMlljlngWwFIE3L8Z89y1fyDykEIgCAKltsCz6MWpvHp+9M
IBY5SeRLWabzTxREWAg2bPjlh03cNX9gAqEIACBt5Qa1i6bkh0i4enviFhLnsKxCE5wvhFKRuuN/
c6BMmN3fEwhGAABrq+0l+BJ18T8R90w7HX5Yv/oRQCqzzrEo9fO/gXrnm2/tzu4EaBYQjgAAgita
DWF/gkaaJ6Y6RhIKGbw6QKCvhFwSzxBTlG37s3c2CPz6A0EJAABQ1m0yTIXoXHuYt+eGQ1u2mgGq
JsjtkDID4Oaf/rvdmXZW5QLCEgBSmqrr4ECA5hIs4p0dHoppV9bBQip7iV/CWsB8/OfH16VPl+cB
whIAAMS8tlSeCNOZdPjS5KAnlMAVy70hkMGmXvRJ0yME6da+9P6Rmlwsv/AEAEDWsKnCFY7TyXMi
OtLWE9NoCXjZQylpUi3OSlELIIatH/7len2u/vqvhP6LEKypfqY0SB/iIeKewTu9CfNy/7C82hSf
kt5uEF77wS8OC735ewrhCQAArCm323RLEVohkFyam5mbcKAlTxQBpLGYMY/Eikbldc//ybGNAmT+
UCEXBAAAsq5dk0zE02T7hCfah5dwjEAeZw9rqypC7qiE1ABiaHnpz14pFy70QzKEX+Xm78otu5ug
+ViaQC/h67/cu6TWK4iHFJDbWlQj0mGAzPLy3769Rp671x/kjgCQTGNtbJHR7ggBAHg84B7tvL8A
m2QAAADJjRX2BZ9E+giaDn/0zhYzr3U/6ZErAgAA1OVrzRo4nEgjBWKeieEZl8uPqmQQAIilXo6G
JVA6jpS2vvjmq01sD/5kP45f5e5vQ/I1W2qD4TieThHE5zqvDgTlcgiHYUi7xR5biOW5GkCUtt2/
+GhrrvZ+y0fyqxz+cQhSV+xoAI50QgAQeNzTd+3eFFaqhCFZeZN1Ib9PloFMh3/5/o6MztLgCzkl
AACwymKvqVVHAmmvTIY8c1MjfWOLhFZjqiqD3GlZI16YDr719v6anHh+U5BjAgAA9I1bLDIMS6bN
/ibi7uG2gVlfJIoZW8tj8Wh+OoUQS9Ohd9/epBXF8gMAieA9whP+vi8uTRJM9LpMptS27Nyx0ew+
89W99KQRHWB52Yuv7dSrRLL84iAAAER4vO/m1XGGJ0XoLFZrfaMeH/lhLN/6ScLrD+xvqTPmehjL
IA4CAACCQ9fv9U0zPjza0LC2Jtk17MmrCHFJzfrdz27Opd8vFaIhAACJiUtne3wxhpodApChNuRe
yvWoGQNRaze+eLxW2JTP9BARAYhkyNF74foo4xEhChzNHyvAvvfYM1WG3Pp9SSAiAgAAMP9Id3vH
RPpNYb5B3bJ1y/oNFgELPphCXAQAAISGL98ZcvnySrenAWyyNT17ZB2/zZ6yhegIQKCos+vMtRkM
zXNv7yNAiMJ84Ng+s4rxsVkCj09sBAAAYIG56d6bNxfZ3yn3gPUb9+5qqOLorHceIEYCAADwuc62
wbGJPD9EFNJWNK/btLmFw5NeuR+jOAkAABEbuHZ5yBNJlzMiXig1hqa9h58RQcSPDqIlACDiEX//
zau9eZoECClb9h9aZ9WIx+lLMU7REgAAQARmR0d6e0YiYh4kGaCSuk2taxrq9SLc960eqsifLR7u
vds9ueBZyh+PDygpszVu2bFZ5LL/EcROAEBgWGTwzo2OxQSGiX2sAEAIoijZePBAkwEW6bYvZcTi
f6iAiCy5Hb3t3dPirwxDGrZs2VBtMYtd8z9FPhAAAACImcGh8emZGREXiMLGyvr6Nc2NVTz39+YW
+UIAAAAeGO7o6HdEwjHx2QOwWqMxrt2+a3NJfgj+p8gjAgA8EY96htraB9wEAUQ0bgggpg1btm6w
aFXpj8QTG/KJAAAAgAXmHY65qdHhGbEMHDKuaWxurLDZc9HegYPhi+U5ZgBiaWy4f9jpXfTnuDwA
0hhKSy01zS0tlbl+JtnPIQ8JAAicwIJDvff7JwMYimK5YAGEyGRybcP6Da1NFgiG8/LlfziRfCQA
AADg0VAouDg9Mjw8nYuz5rVVzWubG016nVYtfm8fHfKWAAAAAAj/3Py8w+F0edx+oZwEiNlaZi0r
s1dUVljy98V/gvwmAAAAANQ3MTY5MeWORGOxRII/fQApVEqlSmuqa2hoaDDl93u/bFb5TwACR1EU
TXgnxsYnZ+YCGCAIQHA5LQgCEARkuqqa2tr6OrtCLpPJpLL+UiDAI6ChwFIgFFx0uVxOpzfAXXtp
RanZbLHZbeYSvV5v0IorrZ81pEOAR4h7XS6ny7u4FI5EIpFoLB5Ds5kiJFOplCq1RqPRGs1ms8Vm
N/N2gntOITkCPFIAeMzjXHA63V6fzx/CcBwncILACYLAAUGAlToCgiAAQRAEYAiGYAiCIRjRlJpN
JpPVZrdbtQ+/B5JcfwkS4BEILJFMJJNJFE3GlvxLS6FwJBIORyLRRAJNJpNJ9ElbCkSpkCnUMrlK
odHq9FqtTqM3lmrlcplcJpcrFDlu4cI3JEuAZSCS0Ug0Fk/EE/F4Iomi2EM8IYACQWRyBJHLFCql
SqlUKlWa/PPpZ4tCIEARNCgYphdBjiIBChxFAhQ4igQocBQJUOAoEqDAUSRAgaNIgAJHkQAFjiIB
ChxFAhQ4/i/5yQ5C1O04UAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMC0wMy0wM1QxNTozNjozOCsw
MTowMJcCPmsAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjAtMDMtMDNUMTU6MzY6MzgrMDE6MDDmX4bX
AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAABJRU5ErkJggg==" />
</svg>

Before

Width:  |  Height:  |  Size: 24 KiB

View File

@ -1,19 +0,0 @@
<svg class="converse-svg-logo"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 364 364">
<title>Converse</title>
<g class="cls-1" id="g904">
<g data-name="Layer 2">
<g data-name="Layer 7">
<path
class="cls-3"
d="M221.46,103.71c0,18.83-29.36,18.83-29.12,0C192.1,84.88,221.46,84.88,221.46,103.71Z" />
<path
class="cls-4"
d="M179.9,4.15A175.48,175.48,0,1,0,355.38,179.63,175.48,175.48,0,0,0,179.9,4.15Zm-40.79,264.5c-.23-17.82,27.58-17.82,27.58,0S138.88,286.48,139.11,268.65ZM218.6,168.24A79.65,79.65,0,0,1,205.15,174a12.76,12.76,0,0,0-6.29,4.65L167.54,222a1.36,1.36,0,0,1-2.46-.8v-35.8a2.58,2.58,0,0,0-3.06-2.53c-15.43,3-30.23,7.7-42.73,19.94-38.8,38-29.42,105.69,16.09,133.16a162.25,162.25,0,0,1-91.47-67.27C-3.86,182.26,34.5,47.25,138.37,25.66c46.89-9.75,118.25,5.16,123.73,62.83C265.15,120.64,246.56,152.89,218.6,168.24Z" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -1,63 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 364 364"
version="1.1">
<title>Logo Converse</title>
<defs>
<linearGradient
id="gradient"
x1="92.14"
y1="27.64"
x2="267.65"
y2="331.62"
gradientUnits="userSpaceOnUse">
<stop
offset="0"
stop-color="#fff1d1"/>
<stop
offset="0.05"
stop-color="#fae8c1"/>
<stop
offset="0.15"
stop-color="#f0d5a1"/>
<stop
offset="0.27"
stop-color="#e7c687"/>
<stop
offset="0.4"
stop-color="#e1bb72"/>
<stop
offset="0.54"
stop-color="#dcb264"/>
<stop
offset="0.71"
stop-color="#daad5c"/>
<stop
offset="1"
stop-color="#d9ac59"/>
</linearGradient>
<filter id="shadow">
<feGaussianBlur in="SourceAlpha" stdDeviation="2.3" result="blur1"/>
<feOffset in="blur1" dx="3" dy="3" result="blur2"/>
<feColorMatrix in="blur2" type="matrix" result="blur3"
values="1 0 0 0 0.6
0 1 0 0 0.6
0 0 1 0 0.6
0 0 0 1 0"/>
<feMerge>
<feMergeNode in="blur3"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
<g filter="url(#shadow)">
<path
d="M221.46,103.71c0,18.83-29.36,18.83-29.12,0C192.1,84.88,221.46,84.88,221.46,103.71Z"
fill="#d9ac59"/>
<path
d="M179.9,4.15A175.48,175.48,0,1,0,355.38,179.63,175.48,175.48,0,0,0,179.9,4.15Zm-40.79,264.5c-.23-17.82,27.58-17.82,27.58,0S138.88,286.48,139.11,268.65ZM218.6,168.24A79.65,79.65,0,0,1,205.15,174a12.76,12.76,0,0,0-6.29,4.65L167.54,222a1.36,1.36,0,0,1-2.46-.8v-35.8a2.58,2.58,0,0,0-3.06-2.53c-15.43,3-30.23,7.7-42.73,19.94-38.8,38-29.42,105.69,16.09,133.16a162.25,162.25,0,0,1-91.47-67.27C-3.86,182.26,34.5,47.25,138.37,25.66c46.89-9.75,118.25,5.16,123.73,62.83C265.15,120.64,246.56,152.89,218.6,168.24Z"
fill="url(#gradient)"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,11 +0,0 @@
(self["webpackChunkconverse_js"] = self["webpackChunkconverse_js"] || []).push([[9210],{
/***/ 5903:
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
!function(e,a){ true?module.exports=a(__webpack_require__(7484)):0}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=a(e),t={name:"af",weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),weekStart:1,weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"}};return n.default.locale(t,null,!0),t}));
/***/ })
}]);
//# sourceMappingURL=af-js.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"locales/dayjs/af-js.js","mappings":";;;;;AAAA,eAAe,KAAoD,kBAAkB,mBAAO,CAAC,IAAO,GAAG,CAA0I,CAAC,mBAAmB,aAAa,cAAc,+CAA+C,WAAW,cAAc,wZAAwZ,SAAS,UAAU,iHAAiH,eAAe,wLAAwL,qCAAqC","sources":["webpack://converse.js/./node_modules/dayjs/locale/af.js"],"sourcesContent":["!function(e,a){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=a(require(\"dayjs\")):\"function\"==typeof define&&define.amd?define([\"dayjs\"],a):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_locale_af=a(e.dayjs)}(this,(function(e){\"use strict\";function a(e){return e&&\"object\"==typeof e&&\"default\"in e?e:{default:e}}var n=a(e),t={name:\"af\",weekdays:\"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag\".split(\"_\"),months:\"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember\".split(\"_\"),weekStart:1,weekdaysShort:\"Son_Maa_Din_Woe_Don_Vry_Sat\".split(\"_\"),monthsShort:\"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des\".split(\"_\"),weekdaysMin:\"So_Ma_Di_Wo_Do_Vr_Sa\".split(\"_\"),ordinal:function(e){return e},formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},relativeTime:{future:\"oor %s\",past:\"%s gelede\",s:\"'n paar sekondes\",m:\"'n minuut\",mm:\"%d minute\",h:\"'n uur\",hh:\"%d ure\",d:\"'n dag\",dd:\"%d dae\",M:\"'n maand\",MM:\"%d maande\",y:\"'n jaar\",yy:\"%d jaar\"}};return n.default.locale(t,null,!0),t}));"],"names":[],"sourceRoot":""}

Some files were not shown because too many files have changed in this diff Show More