From 5c05e41cfb2907f6621833a8f673d66bfcac2699 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20St=C4=99pniowski?= Date: Wed, 24 Sep 2008 17:59:41 +0200 Subject: [PATCH 1/1] =?utf8?q?Added=20"delete"=20button=20to=20book=20bann?= =?utf8?q?ers=20if=20owner=20of=20viewed=20shelf=20is=20the=20current=20us?= =?utf8?q?er.=20Made=20"Na=20p=C3=B3=C5=82k=C4=99!"=20into=20button.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- apps/catalogue/urls.py | 1 + apps/catalogue/views.py | 21 +++++++++++++++---- apps/newtagging/models.py | 8 +++++++ wolnelektury/media/css/master.css | 20 ++++++++++++++++++ wolnelektury/media/js/catalogue.js | 8 +++++++ .../catalogue/tagged_object_list.html | 8 +++++-- 6 files changed, 60 insertions(+), 6 deletions(-) diff --git a/apps/catalogue/urls.py b/apps/catalogue/urls.py index 4910fc2da..b24212ea5 100644 --- a/apps/catalogue/urls.py +++ b/apps/catalogue/urls.py @@ -4,6 +4,7 @@ from django.conf.urls.defaults import * urlpatterns = patterns('catalogue.views', url(r'^$', 'main_page', name='main_page'), + url(r'^polki/(?P[a-zA-Z0-9-]+)/(?P[a-zA-Z0-9-0-]+)/usun$', 'remove_from_shelf', name='remove_from_shelf'), url(r'^polki/$', 'user_shelves', name='user_shelves'), url(r'^polki/(?P[a-zA-Z0-9-]+)/usun/$', 'delete_shelf', name='delete_shelf'), url(r'^polki/(?P[a-zA-Z0-9-]+)\.zip$', 'download_shelf', name='download_shelf'), diff --git a/apps/catalogue/views.py b/apps/catalogue/views.py index b73552ed6..7168fb05d 100644 --- a/apps/catalogue/views.py +++ b/apps/catalogue/views.py @@ -30,7 +30,6 @@ class LazyEncoder(simplejson.JSONEncoder): return obj -@cache.cache_control(must_revalidate=True, max_age=3600) def main_page(request): if request.user.is_authenticated(): shelves = models.Tag.objects.filter(category='set', user=request.user) @@ -58,7 +57,6 @@ def book_list(request): context_instance=RequestContext(request)) -@cache.cache_control(must_revalidate=True, max_age=3600) def tagged_object_list(request, tags=''): # Prevent DoS attacks on our database if len(tags.split('/')) > 6: @@ -70,11 +68,14 @@ def tagged_object_list(request, tags=''): raise Http404 model = models.Book + shelf = [tag for tag in tags if tag.category == 'set'] shelf_is_set = (len(tags) == 1 and tags[0].category == 'set') theme_is_set = len([tag for tag in tags if tag.category == 'theme']) > 0 if theme_is_set: model = models.Fragment + user_is_owner = (len(shelf) and request.user.is_authenticated() and request.user == shelf[0].user) + extra_where = 'NOT catalogue_tag.category = "set"' related_tags = models.Tag.objects.related_for_model(tags, model, counts=True, extra={'where': [extra_where]}) categories = split_tags(related_tags) @@ -88,7 +89,7 @@ def tagged_object_list(request, tags=''): queryset_or_model=model, tags=tags, template_name='catalogue/tagged_object_list.html', - extra_context = {'categories': categories, 'shelf_is_set': shelf_is_set }, + extra_context = {'categories': categories, 'shelf_is_set': shelf_is_set, 'user_is_owner': user_is_owner }, ) @@ -175,7 +176,7 @@ def user_shelves(request): return render_to_response('catalogue/user_shelves.html', locals(), context_instance=RequestContext(request)) - +@login_required @cache.never_cache def book_sets(request, slug): book = get_object_or_404(models.Book, slug=slug) @@ -202,6 +203,18 @@ def book_sets(request, slug): context_instance=RequestContext(request)) +@login_required +@require_POST +@cache.never_cache +def remove_from_shelf(request, shelf, book): + book = get_object_or_404(models.Book, slug=book) + shelf = get_object_or_404(models.Tag, slug=shelf, category='set', user=request.user) + + models.Tag.objects.remove_tag(book, shelf) + + return HttpResponse('Usunieto') + + @cache.never_cache def download_shelf(request, slug): """" diff --git a/apps/newtagging/models.py b/apps/newtagging/models.py index c2628be38..d3a386b29 100644 --- a/apps/newtagging/models.py +++ b/apps/newtagging/models.py @@ -62,6 +62,14 @@ class TagManager(models.Manager): if tag not in current_tags: self.intermediary_table_model._default_manager.create(tag=tag, content_object=obj) + def remove_tag(self, obj, tag): + """ + Remove tag from an object. + """ + content_type = ContentType.objects.get_for_model(obj) + self.intermediary_table_model._default_manager.filter(content_type__pk=content_type.pk, + object_id=obj.pk, tag=tag).delete() + def get_for_object(self, obj): """ Create a queryset matching all tags associated with the given diff --git a/wolnelektury/media/css/master.css b/wolnelektury/media/css/master.css index ad53536ac..59588a864 100644 --- a/wolnelektury/media/css/master.css +++ b/wolnelektury/media/css/master.css @@ -396,6 +396,13 @@ div.shown-tags p { float: right; } +.change-sets a { + padding: 0.2em; + margin: 0.3em; + border: 0.1em solid #EEE; + background-color: #F9F9F9; +} + .book-description { margin-left: 3.5em; } @@ -593,3 +600,16 @@ div.shown-tags p { .see-more { text-align: right; } + +.remove-from-shelf { + float: right; + padding: 0.2em; + margin: 0.3em; + color: #900; +} + +.remove-from-shelf:active, .remove-from-shelf:hover { + color: #FFF; + background-color: #900; + text-decoration: none; +} \ No newline at end of file diff --git a/wolnelektury/media/js/catalogue.js b/wolnelektury/media/js/catalogue.js index 857849d98..87aee5dad 100644 --- a/wolnelektury/media/js/catalogue.js +++ b/wolnelektury/media/js/catalogue.js @@ -193,6 +193,14 @@ }); } }); + + $('a.remove-from-shelf').click(function(event) { + event.preventDefault(); + link = $(this); + $.post(link.attr('href'), function(data, textStatus) { + link.parent().remove(); + }); + }); }); })(jQuery) \ No newline at end of file diff --git a/wolnelektury/templates/catalogue/tagged_object_list.html b/wolnelektury/templates/catalogue/tagged_object_list.html index 346034b1d..5bcab78a8 100644 --- a/wolnelektury/templates/catalogue/tagged_object_list.html +++ b/wolnelektury/templates/catalogue/tagged_object_list.html @@ -30,12 +30,16 @@ Pobierz wszystkie książki z tej półki {% endif %} - {% endwith %}
    {% for book in object_list %} -
  1. {{ book.short_html }}
  2. +
  3. + {% if user_is_owner %} + Usuń + {% endif %} + {{ book.short_html }}
  4. {% endfor %}
+ {% endwith %} {% paginate %}
-- 2.20.1