fix #3667: poprawa wyświetlanania losowych przykładów w katalogach tagów
authorJan Szejko <j-sz@o2.pl>
Tue, 26 Jan 2016 15:21:55 +0000 (16:21 +0100)
committerJan Szejko <j-sz@o2.pl>
Tue, 26 Jan 2016 15:21:55 +0000 (16:21 +0100)
src/catalogue/templates/catalogue/tag_box.html
src/catalogue/templatetags/catalogue_tags.py
src/catalogue/views.py
src/wolnelektury/static/scss/main/base.scss

index e16e553..b6dc697 100644 (file)
@@ -2,11 +2,11 @@
 {% load i18n %}
 {% load catalogue_tags %}
 <div class="white-box normal-text">
-    <h2>{% trans tag.category as c %}{{ c|capfirst }}: {{ tag }}</h2>
-    {% if tag.description %}
-    {{ tag.description|safe|truncatewords_html:40 }}
-    {% else %}
+  <h2>{% trans tag.category as c %}{{ c|capfirst }}: {{ tag }}</h2>
+  {% if tag.description %}
+    {{ tag.description|strip_tag:"a"|safe|truncatewords_html:40 }}
+  {% else %}
     <em>{% trans "No description." %}</em>
-    {% endif %}
+  {% endif %}
 </div>
 {% endspaceless %}
index 117abba..941ab63 100644 (file)
@@ -490,3 +490,10 @@ def choose_fragment(request, book_id=None, tag_ids=None, unless=False):
         fragment_count = fragments.count()
         fragment = fragments[randint(0, fragment_count - 1)] if fragment_count else None
     return fragment.pk if fragment is not None else None
+
+
+@register.filter
+def strip_tag(html, tag_name):
+    # docelowo może być warto zainstalować BeautifulSoup do takich rzeczy
+    import re
+    return re.sub(r"<.?%s\b[^>]*>" % tag_name, "", html)
index e71895f..847831d 100644 (file)
@@ -712,8 +712,10 @@ def tag_catalogue(request, category):
     else:
         tags = list(get_top_level_related_tags((), categories=(category,)))
 
-    if len(tags) > 3:
-        best = random.sample(tags, 3)
+    tags = [tag for tag in tags if tag.description]
+
+    if len(tags) > 4:
+        best = random.sample(tags, 4)
     else:
         best = tags
 
index 2225c0f..1a25dbd 100755 (executable)
@@ -156,7 +156,9 @@ ul.plain {
 
     @media screen and (min-width: 768px) {
         display: inline-block;
+        vertical-align: top;
         width: 48%;
         margin-right: 1%;
+        @include size(margin-bottom, 10px);
     }
 }