From: Marek Stępniowski Date: Thu, 4 Sep 2008 20:18:33 +0000 (+0200) Subject: Intelligent fragment folding and unfolding. X-Git-Url: https://git.mdrn.pl/wolnelektury.git/commitdiff_plain/4d5337ffa4ccaa027930b00d6a1c0f371d959227 Intelligent fragment folding and unfolding. --- diff --git a/catalogue/models.py b/catalogue/models.py index d252bbf69..e9c8928dc 100644 --- a/catalogue/models.py +++ b/catalogue/models.py @@ -129,6 +129,8 @@ class Book(models.Model): from tempfile import NamedTemporaryFile from slughifi import slughifi import dcparser + from markupstring import MarkupString + import re # Read book metadata book_info = dcparser.parse(xml_file) @@ -159,7 +161,11 @@ class Book(models.Model): closed_fragments, open_fragments = html.extract_fragments(book.html_file.path) book_themes = [] for fragment in closed_fragments.values(): - new_fragment = Fragment(html=fragment.to_string(), anchor=fragment.id, book=book) + text = fragment.to_string() + short_text = '' + if (len(re.sub(r'', '', text)) > 400): + short_text = MarkupString(text)[:240] + new_fragment = Fragment(text=text, short_text=short_text, anchor=fragment.id, book=book) theme_names = [s.strip() for s in fragment.themes.split(',')] themes = [] @@ -190,7 +196,8 @@ class Book(models.Model): class Fragment(models.Model): - html = models.TextField() + text = models.TextField() + short_text = models.TextField(editable=False) _short_html = models.TextField(editable=False) anchor = models.IntegerField() book = models.ForeignKey(Book, related_name='fragments') diff --git a/media/css/master.css b/media/css/master.css index bbce7b54b..530062ab6 100644 --- a/media/css/master.css +++ b/media/css/master.css @@ -404,7 +404,3 @@ em { margin-bottom: 1.5em; } -.fragment-text { - max-height: 12em; - overflow: hidden; -} diff --git a/media/js/catalogue.js b/media/js/catalogue.js index 11d30b8c2..bdceb1a64 100644 --- a/media/js/catalogue.js +++ b/media/js/catalogue.js @@ -14,13 +14,26 @@ $('#login-form').show(); }); - $('.fragment-text').toggle( - function() { $(this).addClass('fragment-text-full').removeClass('fragment-text'); }, - function() { $(this).addClass('fragment-text').removeClass('fragment-text-full'); } - ).hover( + // Fragments + $('.fragment-text').each(function() { + if ($(this).prev().filter('.fragment-short-text').length) { + $(this).hover( + function() { $(this).css({background: '#F3F3F3', cursor: 'pointer'}); }, + function() { $(this).css({background: '#FFF'}); } + ).click(function() { + $(this).fadeOut(function() { + $(this).prev().fadeIn() + }); + }) + } + }); + + $('.fragment-short-text').click(function() { + $(this).fadeOut(function() { $(this).next().fadeIn() }); + }).hover( function() { $(this).css({background: '#F3F3F3', cursor: 'pointer'}); }, function() { $(this).css({background: '#FFF'}); } - ) + ); $('#registration-form').ajaxForm({ dataType: 'json', diff --git a/templates/catalogue/tagged_book_list.html b/templates/catalogue/tagged_book_list.html index 12c0981dc..83e530c9f 100644 --- a/templates/catalogue/tagged_book_list.html +++ b/templates/catalogue/tagged_book_list.html @@ -7,6 +7,7 @@ {% block extrahead %} {% endblock %}