Tronquage des descriptions dans la recherche de ressources.
authorEric Mc Sween <eric.mcsween@gmail.com>
Wed, 27 Oct 2010 14:56:09 +0000 (10:56 -0400)
committerEric Mc Sween <eric.mcsween@gmail.com>
Wed, 27 Oct 2010 14:56:09 +0000 (10:56 -0400)
auf_savoirs_en_partage/savoirs/templatetags/search.py
auf_savoirs_en_partage/templates/savoirs/ressource_index.html

index 9b02646..d2300fd 100644 (file)
@@ -6,6 +6,8 @@ from django.utils.safestring import mark_safe
 
 register = template.Library()
 
+EXCERPT_LENGTH = 200
+
 @register.filter
 def highlight(text, regexp, autoescape=None):
     """Met en évidence les parties du texte qui correspondent à l'expression
@@ -15,3 +17,31 @@ def highlight(text, regexp, autoescape=None):
     if regexp:
         text = regexp.sub(r'<b>\g<0></b>', text)
     return mark_safe(text)
+
+@register.filter
+def excerpt(text, regexp):
+    """Tronque le texte autour de la première correspondance de l'expression
+       régulière."""
+    if len(text) <= EXCERPT_LENGTH:
+        return text
+    m = regexp.search(text)
+    if m:
+        pos = m.start()
+        end_of_sentence = max(text.rfind('.', 0, pos), text.rfind('?', 0, pos), text.rfind('!', 0, pos))
+        start = end_of_sentence + 1 if end_of_sentence != -1 else 0
+        end = pos + EXCERPT_LENGTH
+    else:
+        start = 0
+        end = start + EXCERPT_LENGTH
+    if end < len(text) - 1:
+        try:
+            end = text.rindex(' ', start, end)
+        except ValueError:
+            pass
+    excerpt = text[start:end].strip()
+    if start > 0:
+        excerpt = '(...) ' + excerpt
+    if end < len(text) - 1:
+        excerpt += ' (...)'
+    return excerpt
+excerpt.is_safe = True
index 809e84a..4276fe4 100644 (file)
@@ -23,7 +23,7 @@
       <div><span class="lbl">Auteur:</span> {{ r.creator|highlight:search_regexp }}</div>
       {% endif %}
       {% if r.description %}
-      <div class="resultatResume"><span class="lbl">Description:</span> {{ r.description|highlight:search_regexp }}</div>
+      <div class="resultatResume"><span class="lbl">Description:</span> {{ r.description|excerpt:search_regexp|highlight:search_regexp }}</div>
       {% endif %}
     </div>
     {% empty %}