arreglo de ui y busquedas

This commit is contained in:
jlimolina 2025-11-21 04:42:02 +01:00
parent cb8f69fb93
commit fc06566928
15 changed files with 1115 additions and 435 deletions

View file

@ -9,7 +9,12 @@
{% if n.imagen_url %}
<div class="noticia-imagen">
<a href="{{ detalle_url }}">
<img src="{{ n.imagen_url }}" alt="Imagen para {{ n.titulo }}" loading="lazy">
<img
src="{{ n.imagen_url }}"
alt="Imagen para {{ n.titulo }}"
loading="lazy"
onerror="this.closest('.noticia-imagen').style.display='none';"
>
</a>
</div>
{% endif %}

View file

@ -47,12 +47,21 @@
</div>
<div class="card">
<div class="card-header">
<div class="card-header">
<h3>Operaciones del Sistema</h3>
</div>
<div class="card-body">
<p>Genera una copia de seguridad completa de todas tus fuentes y noticias en un archivo .zip.</p>
<a href="{{ url_for('backup_completo') }}" class="btn btn-secondary"><i class="fas fa-archive"></i> Backup Completo (.zip)</a>
<p>Genera o restaura una copia de seguridad completa de todas tus fuentes y noticias.</p>
<div style="display:flex; gap:10px; flex-wrap:wrap;">
<a href="{{ url_for('backup_completo') }}" class="btn btn-secondary">
<i class="fas fa-archive"></i> Backup Completo (.zip)
</a>
<a href="{{ url_for('restore_completo') }}" class="btn btn-info">
<i class="fas fa-upload"></i> Restaurar Backup (.zip)
</a>
</div>
</div>
</div>

View file

@ -50,19 +50,28 @@
{% if d.imagen_url %}
<div style="margin-bottom:16px; text-align:center;">
<img src="{{ d.imagen_url }}" alt="Imagen de la noticia" style="max-width:100%; height:auto;" loading="lazy">
<img
src="{{ d.imagen_url }}"
alt="Imagen de la noticia"
loading="lazy"
onerror="this.style.display='none';"
>
</div>
{% endif %}
{% if d.resumen_trad %}
<h3>Resumen (traducido)</h3>
<div>{{ d.resumen_trad|safe_html }}</div>
<div class="resumen-container">
<div class="resumen-completo" style="display:block;">{{ d.resumen_trad|safe_html }}</div>
</div>
<hr>
{% endif %}
{% if d.resumen_orig %}
<h3>Resumen (original)</h3>
<div>{{ d.resumen_orig|safe_html }}</div>
<div class="resumen-container">
<div class="resumen-completo" style="display:block;">{{ d.resumen_orig|safe_html }}</div>
</div>
{% endif %}
{% if tags and tags|length %}
@ -87,7 +96,12 @@
{% if r.imagen_url %}
<div class="noticia-imagen">
<a href="{{ r.url }}" target="_blank" rel="noopener">
<img src="{{ r.imagen_url }}" alt="Imagen relacionada" loading="lazy">
<img
src="{{ r.imagen_url }}"
alt="Imagen relacionada"
loading="lazy"
onerror="this.closest('.noticia-imagen').style.display='none';"
>
</a>
</div>
{% endif %}

View file

@ -0,0 +1,49 @@
{% extends "base.html" %}
{% block title %}Restaurar Backup Completo{% endblock %}
{% block content %}
<div class="card">
<div class="card-header">
<h3>Restaurar Backup Completo</h3>
</div>
<div class="card-body">
<p>
Sube un archivo <strong>.zip</strong> generado desde
<em>"Backup Completo (.zip)"</em> en el dashboard.
</p>
<div style="background: #fff3cd; border: 1px solid #ffeeba; padding: 10px 12px; border-radius: 8px; margin: 15px 0;">
<strong>⚠ Atención:</strong>
<ul style="margin: 8px 0 0 18px; padding: 0;">
<li>Se <strong>vaciarán</strong> las tablas <code>feeds</code> y <code>fuentes_url</code>.</li>
<li>Los datos de esos CSV se volverán a cargar desde el backup.</li>
<li>No se tocan noticias, traducciones ni tags.</li>
</ul>
</div>
<form action="{{ url_for('restore_completo') }}" method="post" enctype="multipart/form-data">
<div class="form-group" style="margin-bottom: 15px;">
<label for="backup_file"><strong>Archivo .zip de backup completo</strong></label>
<input
type="file"
id="backup_file"
name="backup_file"
accept=".zip"
required
style="display:block; margin-top:8px;"
>
</div>
<div style="margin-top: 20px; display:flex; gap:10px;">
<a href="{{ url_for('dashboard') }}" class="btn btn-secondary">Cancelar</a>
<button type="submit" class="btn btn-danger">
<i class="fas fa-exclamation-triangle"></i>
Restaurar desde backup
</button>
</div>
</form>
</div>
</div>
{% endblock %}