Files
proyecto-final/tienda/templates/tienda/add_review.html
T
elordenador e4f0611ac5 refactor: replace parseInt with Number.parseInt for consistency and clarity
fix: add hidden input to card data labels for improved accessibility
refactor: add scope attributes to table headers for better semantic structure
2026-05-26 13:31:07 +02:00

109 lines
4.5 KiB
HTML

{% extends "tienda/base.html" %}
{% block content %}
<div class="container py-4">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'index' %}">Inicio</a></li>
<li class="breadcrumb-item"><a href="{% url 'producto' product.id %}">{{ product.name }}</a></li>
<li class="breadcrumb-item active" aria-current="page">Valorar Producto</li>
</ol>
</nav>
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card shadow-sm">
<div class="card-body">
<h4 class="card-title mb-4">
{% if existing_review %}Actualizar{% else %}Añadir{% endif %} valoración: {{ product.name }}
</h4>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="mb-4">
<label class="form-label" for="rating-input">
Puntuación
<div class="star-rating d-flex gap-1" id="star-rating">
{% for i in "12345" %}
<span class="star fs-2 {% if form.initial.rating|default:0 >= i|add:0 %}text-warning text-dark{% else %}text-secondary{% endif %}" data-value="{{ i }}" style="cursor: pointer; font-size: 2rem;"></span>
{% endfor %}
</div>
<input type="hidden" name="rating" id="rating-input" value="{{ form.initial.rating|default:1 }}">
</label>
{% if form.rating.errors %}
<div class="text-danger small">{{ form.rating.errors }}</div>
{% endif %}
</div>
<div class="mb-3">
<label for="title" class="form-label">Título</label>
{{ form.title }}
{% if form.title.errors %}
<div class="text-danger small">{{ form.title.errors }}</div>
{% endif %}
</div>
<div class="mb-3">
<label for="content" class="form-label">Descripción</label>
{{ form.content }}
{% if form.content.errors %}
<div class="text-danger small">{{ form.content.errors }}</div>
{% endif %}
</div>
<div class="d-grid gap-2">
<button type="submit" class="btn btn-primary">
{% if existing_review %}Actualizar{% else %}Enviar{% endif %} valoración
</button>
<a href="{% url 'producto' product.id %}" class="btn btn-outline-secondary">Cancelar</a>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const stars = document.querySelectorAll('#star-rating .star');
const ratingInput = document.getElementById('rating-input');
function updateStars(value) {
stars.forEach((star, index) => {
if (index < value) {
star.classList.remove('text-secondary');
star.classList.add('text-warning');
} else {
star.classList.remove('text-warning');
star.classList.add('text-secondary');
}
});
ratingInput.value = value;
}
stars.forEach(star => {
star.addEventListener('click', function() {
const value = Number.parseInt(this.dataset.value);
updateStars(value);
});
star.addEventListener('mouseenter', function() {
const value = Number.parseInt(this.dataset.value);
stars.forEach((s, index) => {
if (index < value) {
s.classList.remove('text-secondary');
s.classList.add('text-warning');
}
});
});
star.addEventListener('mouseleave', function() {
updateStars(Number.parseInt(ratingInput.value) || 1);
});
});
});
</script>
{% endblock %}