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 = {}
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 = {}
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,
(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');
});
// 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();
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'}); },