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)
         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 = []
 
 
 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')
 
             $('#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',