Merge branch 'master' of git+ssh://github.com/fnp/wolnelektury
authorRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Fri, 18 Jun 2010 13:33:00 +0000 (15:33 +0200)
committerRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Fri, 18 Jun 2010 13:33:00 +0000 (15:33 +0200)
apps/catalogue/views.py
wolnelektury/static/js/catalogue.js
wolnelektury/templates/catalogue/tagged_object_list.html

index 47abe63..102b38e 100644 (file)
@@ -105,8 +105,9 @@ def tagged_object_list(request, tags=''):
         raise Http404
 
     theme_is_set = [tag for tag in tags if tag.category == 'theme']
-    shelf_is_set = len(tags) == 1 and tags[0].category == 'set'
-    my_shelf_is_set = shelf_is_set and request.user.is_authenticated() and request.user == tags[0].user
+    shelf_is_set = [tag for tag in tags if tag.category == 'set']
+    only_shelf = shelf_is_set and len(tags) == 1
+    only_my_shelf = only_shelf and request.user.is_authenticated() and request.user == tags[0].user
 
     objects = only_author = pd_counter = None
     categories = {}
@@ -136,11 +137,12 @@ def tagged_object_list(request, tags=''):
     else:
         # get relevant books and their tags
         objects = models.Book.tagged.with_all(tags).order_by()
-        l_tags = [book.book_tag() for book in objects]
-        # eliminate descendants
-        descendants_keys = [book.pk for book in models.Book.tagged.with_any(l_tags)]
-        if descendants_keys:
-            objects = objects.exclude(pk__in=descendants_keys)
+        if not shelf_is_set:
+            # eliminate descendants
+            l_tags = [book.book_tag() for book in objects]
+            descendants_keys = [book.pk for book in models.Book.tagged.with_any(l_tags)]
+            if descendants_keys:
+                objects = objects.exclude(pk__in=descendants_keys)
 
         # get related tags from `tag_counter` and `theme_counter`
         related_counts = {}
@@ -169,10 +171,10 @@ def tagged_object_list(request, tags=''):
         template_name='catalogue/tagged_object_list.html',
         extra_context={
             'categories': categories,
-            'shelf_is_set': shelf_is_set,
+            'only_shelf': only_shelf,
             'only_author': only_author,
             'pd_counter': pd_counter,
-            'user_is_owner': my_shelf_is_set,
+            'only_my_shelf': only_my_shelf,
             'formats_form': forms.DownloadFormatsForm(),
 
             'tags': tags,
index 55ecef6..a465c66 100644 (file)
@@ -108,6 +108,52 @@ function serverTime() {
 (function($) {
     $(function() {
 
+        $.fn.toggle_slide = function(p) {
+            cont = $(this);
+            short_el = p['short_el'] || $(':first-child', this);
+            long_el = p['long_el'] || short_el.next();
+            button = p['button'];
+            short_text = p['short_text'],
+            long_text = p['long_text'];
+
+            var toggle = function() {
+                if (cont.hasClass('short')) {
+                    cont.animate({"height": long_el.attr("cont_h")+'px'}, {duration: "fast" }).removeClass('short');
+                    short_el.hide();
+                    long_el.show();
+                    if (button && long_text) button.html(long_text);
+                } else {
+                    cont.animate({"height": short_el.attr("cont_h")+'px'}, {duration: "fast" }).addClass('short');
+                    long_el.hide();
+                    short_el.show();
+                    if (button && short_text) button.html(short_text);
+                }
+                return false;
+            }
+            if (long_el.html().length <= short_el.html().length)
+                return;
+
+            // ensure long element shown first
+            long_el.show();short_el.hide();
+            long_el.attr("cont_h", $(this).height()).hide();
+            short_el.show().attr("cont_h", $(this).height());
+            $(this).addClass('short');
+
+            if (button && short_text) button.html(short_text);
+            if (button) button.hover(
+                function() { $(this).css({background: '#F3F3F3', cursor: 'pointer'}); },
+                function() { $(this).css({background: '#EEE'}); }
+            ).click(toggle);
+            short_el.hover(
+                function() { $(this).css({background: '#F3F3F3', cursor: 'pointer'}); },
+                function() { $(this).css({background: '#FFF'}); }
+            ).click(toggle);
+            long_el.hover(
+                function() { $(this).css({background: '#F3F3F3', cursor: 'pointer'}); },
+                function() { $(this).css({background: '#FFF'}); }
+            ).click(toggle);
+        };
+
         $('form input').labelify({labelledClass: 'blur'});
 
         target = $('#login-register-window div.target');
@@ -123,28 +169,14 @@ function serverTime() {
         });
 
         // 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();
-                    });
-                    return false;
-                })
-            }
+        $('.fragment-short-text').each(function() {
+            var fragment = $(this).closest('.fragment');
+            fragment.toggle_slide({
+                short_el: $(this),
+                long_el: fragment.find('.fragment-text')
+            })
         });
 
-        $('.fragment-short-text').click(function() {
-            $(this).fadeOut(function() { $(this).next().fadeIn() });
-            return false;
-        }).hover(
-            function() { $(this).css({background: '#F3F3F3', cursor: 'pointer'}); },
-            function() { $(this).css({background: '#FFF'}); }
-        );
-
         $('.show-all-tags').click(function() {
             $(this).parent().parent().fadeOut(function() {
                 $(this).next().fadeIn();
@@ -312,45 +344,13 @@ function serverTime() {
             location.href = $('h2 a', this).attr('href');
         });
 
-        function toggled_by_slide(cont, short_el, long_el, button, short_text, long_text) {
-            function toggle(cont, short_el, long_el, button, short_text, long_text) {
-                if (cont.hasClass('short')) {
-                    cont.animate({"height": long_el.attr("cont_h")+'px'}, {duration: "fast" }).removeClass('short');
-                    short_el.hide();
-                    long_el.show();
-                    button.html(long_text);
-                } else {
-                    cont.animate({"height": short_el.attr("cont_h")+'px'}, {duration: "fast" }).addClass('short');
-                    long_el.hide();
-                    short_el.show();
-                    button.html(short_text);
-                }
-            }
-            if (long_el.html().length <= short_el.html().length)
-                return;
-
-            long_el.attr("cont_h", cont.height()).hide();
-            short_el.show().attr("cont_h", cont.height());
-            cont.addClass('short');
-            button.html(short_text);
-            button.hover(
-                function() { $(this).css({background: '#F3F3F3', cursor: 'pointer'}); },
-                function() { $(this).css({background: '#EEE'}); }
-            ).click(function(){
-                toggle(cont, short_el, long_el, button, short_text, long_text)
-            });
-            cont.hover(
-                function() { $(this).css({background: '#F3F3F3', cursor: 'pointer'}); },
-                function() { $(this).css({background: '#FFF'}); }
-            ).click(function(){
-                toggle(cont, short_el, long_el, button, short_text, long_text)
-            })
-        }
-        toggled_by_slide($('#description'), $('#description-short'), $('#description-long'),
-          $('#toggle-description p'),
-          LOCALE_TEXTS[LANGUAGE_CODE]['EXPAND_DESCRIPTION']+' ▼',
-            LOCALE_TEXTS[LANGUAGE_CODE]['HIDE_DESCRIPTION'] + ' ▲'
-        );
+        $('#description').each(function(){$(this).toggle_slide({
+            long_el: $('#description-long', this),
+            short_el: $('#description-short', this),
+            button: $(this).nextAll('#toggle-description').first().find('p'),
+            long_text: LOCALE_TEXTS[LANGUAGE_CODE]['HIDE_DESCRIPTION'] + ' ▲',
+            short_text: LOCALE_TEXTS[LANGUAGE_CODE]['EXPAND_DESCRIPTION'] + ' ▼'
+        })});
 
         $('#toggle-share-shelf').hover(
             function() { $(this).css({background: '#F3F3F3', cursor: 'pointer'}); },
index 952ba2b..b24929c 100644 (file)
@@ -10,7 +10,7 @@
     <h1>{% title_from_tags tags %}</h1>
     {% breadcrumbs tags %}
 
-    {% if shelf_is_set and not object_list %}
+    {% if only_shelf and not object_list %}
     <div id="books-list">
         <h2>{% trans "Your shelf is empty" %}</h2>
         <p>{% trans "You can put a book on a shelf by entering page of the reading and clicking 'Put on the shelf'." %}</p>
@@ -27,7 +27,7 @@
             <div class="clearboth"></div>
             <div id="toggle-description"><p></p></div>
         {% endif %}
-        {% if shelf_is_set %}
+        {% if only_shelf %}
             <a id="download-shelf" href="{% url download_shelf last_tag.slug %}">
                 {% trans "Download all books from this shelf" %}
             </a>
@@ -44,7 +44,7 @@
                     <div class="clearboth"></div>
                 </form>
             </div>
-            {% if user_is_owner %}
+            {% if only_my_shelf %}
             <div id="toggle-share-shelf"><p>{% trans "Share this shelf" %}</p></div>
             <div id="share-shelf">
                 <p>{% trans "Copy this link and share it with other people to let them see your shelf." %}