Simplify rating form:
- Create a snippet to regroup similar code. - Reduce and document tricky logic of CSS. - Add i18n strings.
This commit is contained in:
@ -27,16 +27,8 @@
|
||||
{% if type == 'review' %}
|
||||
<fieldset>
|
||||
<legend class="is-sr-only">{% trans "Rating" %}</legend>
|
||||
<div class="field is-grouped stars form-rate-stars">
|
||||
<label class="is-sr-only" for="no-rating-{{ book.id }}">{% trans "No rating" %}</label>
|
||||
<input class="is-sr-only" type="radio" name="rating" value="" id="no-rating-{{ book.id }}" checked>
|
||||
{% for i in '12345'|make_list %}
|
||||
<input class="is-sr-only" id="book{{book.id}}-star-{{ forloop.counter }}" type="radio" name="rating" value="{{ forloop.counter }}">
|
||||
<label class="icon icon-star-empty" for="book{{book.id}}-star-{{ forloop.counter }}">
|
||||
<span class="is-sr-only">{{ forloop.counter }} star{{ forloop.counter | pluralize }}</span>
|
||||
</label>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
{% include 'snippets/form_rate_stars.html' with book=book type=type|default:'summary' %}
|
||||
</fieldset>
|
||||
{% endif %}
|
||||
|
||||
|
54
bookwyrm/templates/snippets/form_rate_stars.html
Normal file
54
bookwyrm/templates/snippets/form_rate_stars.html
Normal file
@ -0,0 +1,54 @@
|
||||
{% spaceless %}
|
||||
{% load i18n %}
|
||||
{% load bookwyrm_tags %}
|
||||
|
||||
<div class="
|
||||
field is-grouped
|
||||
stars form-rate-stars
|
||||
{% if classes %}{{classes}}{% endif%}
|
||||
">
|
||||
<input
|
||||
id="{{ type|slugify }}-{{ book.id }}-no-rating"
|
||||
class="is-sr-only"
|
||||
type="radio"
|
||||
name="rating"
|
||||
value="0"
|
||||
{% if book|user_rating:user == 0 %}checked{% endif %}
|
||||
>
|
||||
|
||||
<label class="is-sr-only" for="{{ type|slugify }}-{{ book.id }}-no-rating">
|
||||
{% trans "No rating" %}
|
||||
</label>
|
||||
|
||||
{% for i in '12345'|make_list %}
|
||||
<input
|
||||
id="{{ type|slugify }}-book{{ book.id }}-star-{{ forloop.counter }}"
|
||||
class="is-sr-only"
|
||||
type="radio"
|
||||
name="rating"
|
||||
value="{{ forloop.counter }}"
|
||||
{% if book|user_rating:user == forloop.counter %}checked{% endif %}
|
||||
/>
|
||||
|
||||
<label
|
||||
class="
|
||||
icon
|
||||
{% if forloop.counter <= book|user_rating:user %}
|
||||
icon-star-full
|
||||
{% else %}
|
||||
icon-star-empty
|
||||
{% endif %}
|
||||
"
|
||||
for="{{ type|slugify }}-book{{ book.id }}-star-{{ forloop.counter }}"
|
||||
>
|
||||
<span class="is-sr-only">
|
||||
{% blocktranslate trimmed count rating=forloop.counter %}
|
||||
{{ rating }} star
|
||||
{% plural %}
|
||||
{{ rating }} stars
|
||||
{% endblocktranslate %}
|
||||
</span>
|
||||
</label>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endspaceless %}
|
@ -8,18 +8,8 @@
|
||||
<input type="hidden" name="user" value="{{ request.user.id }}">
|
||||
<input type="hidden" name="book" value="{{ book.id }}">
|
||||
<input type="hidden" name="privacy" value="public">
|
||||
<input type="hidden" name="rating" value="{{ forloop.counter }}">
|
||||
|
||||
<div class="field is-grouped stars form-rate-stars mb-1 has-text-warning-dark">
|
||||
<label class="is-sr-only" for="rating-no-rating-{{ book.id }}">{% trans "No rating" %}</label>
|
||||
<input class="is-sr-only" type="radio" name="rating" value="" id="rating-no-rating-{{ book.id }}" checked>
|
||||
{% for i in '12345'|make_list %}
|
||||
<input class="is-sr-only" id="rating-book{{book.id}}-star-{{ forloop.counter }}" type="radio" name="rating" value="{{ forloop.counter }}" {% if book|user_rating:user == forloop.counter %}checked{% endif %}>
|
||||
<label class="icon icon-star-empty" for="rating-book{{book.id}}-star-{{ forloop.counter }}">
|
||||
<span class="is-sr-only">{{ forloop.counter }} star{{ forloop.counter | pluralize }}</span>
|
||||
</label>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% include 'snippets/form_rate_stars.html' with book=book classes='mb-1 has-text-warning-dark' %}
|
||||
|
||||
<div class="field has-addons hidden">
|
||||
<div class="control">
|
||||
|
@ -1,8 +1,27 @@
|
||||
{% spaceless %}
|
||||
{% load i18n %}
|
||||
|
||||
<p class="stars">
|
||||
<span class="is-sr-only">{% if rating %}{{ rating|floatformat }} star{{ rating|floatformat | pluralize }}{% else %}{% trans "No rating" %}{% endif %}</span>
|
||||
{% for i in '12345'|make_list %}
|
||||
<span class="icon is-small mr-1 icon-star-{% if rating >= forloop.counter %}full{% elif rating|floatformat:0 >= forloop.counter|floatformat:0 %}half{% else %}empty{% endif %}" aria-hidden="true">
|
||||
<span class="is-sr-only">
|
||||
{% if rating %}
|
||||
{% blocktranslate trimmed with rating=rating|floatformat count counter=rating|length %}
|
||||
{{ rating }} star
|
||||
{% plural %}
|
||||
{{ rating }} stars
|
||||
{% endblocktranslate %}
|
||||
{% else %}
|
||||
{% trans "No rating" %}
|
||||
{% endif %}
|
||||
</span>
|
||||
|
||||
{% for i in '12345'|make_list %}
|
||||
<span
|
||||
class="
|
||||
icon is-small mr-1
|
||||
icon-star-{% if rating >= forloop.counter %}full{% elif rating|floatformat:0 >= forloop.counter|floatformat:0 %}half{% else %}empty{% endif %}
|
||||
"
|
||||
aria-hidden="true"
|
||||
></span>
|
||||
{% endfor %}
|
||||
</p>
|
||||
{% endspaceless %}
|
||||
|
Reference in New Issue
Block a user