fmartingr
/
shelfzilla
Archived
1
0
Fork 0

Added pjax and fallback calls for the "I have it" and "Wishlist this" volume

This commit is contained in:
Felipe Martin 2014-03-31 17:54:30 +02:00
parent 2f6e671c95
commit 28fe1f5ce6
7 changed files with 116 additions and 10 deletions

View File

@ -88,7 +88,7 @@ class UserHaveVolume(models.Model):
class UserWishlistVolume(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
related_name='want_volumes')
related_name='wishlisted_volumes')
volume = models.ForeignKey(Volume, related_name='wishlisted_by')
def __unicode__(self):
@ -96,4 +96,4 @@ class UserWishlistVolume(models.Model):
self.user.name,
_('wants'),
self.volume
)
)

View File

@ -0,0 +1,13 @@
from django.conf.urls import patterns, url
from ..views.volumes import WishlistVolumeView, HaveVolumeView
urlpatterns = patterns(
'',
url(r'^(?P<vid>\d+)/wishlist_it/$',
WishlistVolumeView.as_view(),
name='volume.wishlist'),
url(r'^(?P<vid>\d+)/have_it/$',
HaveVolumeView.as_view(),
name='volume.have_it'),
)

View File

@ -0,0 +1,83 @@
from django.http import HttpResponseRedirect
from django.template import RequestContext
from django.utils.translation import ugettext as _
from django.contrib import messages
from django.shortcuts import render_to_response, get_object_or_404
from django.core.urlresolvers import reverse
from ..models import Volume, UserWishlistVolume, UserHaveVolume
from .series import SeriesView
class WishlistVolumeView(SeriesView):
template = 'manga/series/volumes/volume-pjax.html'
def get(self, request, vid):
volume = get_object_or_404(Volume, pk=vid)
# Check if user already have this volume!
try:
UserHaveVolume.objects.get(volume=volume, user=request.user)
messages.error(
request,
_('{} is already on your collection!'.format(volume))
)
except UserHaveVolume.DoesNotExist:
# Try to add to the wishlist...
try:
user_wish = UserWishlistVolume.objects.get(
volume=volume, user=request.user)
user_wish.delete()
messages.info(request,
_('{} removed from wishlist'.format(volume)))
except UserWishlistVolume.DoesNotExist:
# Or remove it if already in it!
user_wish = UserWishlistVolume(
volume=volume, user=request.user)
user_wish.save()
messages.success(request, _('{} wishlisted!'.format(volume)))
context = RequestContext(request, {'volume': volume})
if context.get('is_pjax'):
return render_to_response(self.template, context_instance=context)
else:
return HttpResponseRedirect(
reverse('series.detail', args=[volume.series.pk])
)
class HaveVolumeView(SeriesView):
template = 'manga/series/volumes/volume-pjax.html'
def get(self, request, vid):
volume = get_object_or_404(Volume, pk=vid)
try:
user_have = UserHaveVolume.objects.get(
volume=volume, user=request.user)
user_have.delete()
messages.info(request,
_('{} removed from collection.'.format(volume)))
except UserHaveVolume.DoesNotExist:
user_have = UserHaveVolume(volume=volume, user=request.user)
user_have.save()
messages.success(request,
_('{} added to collection!'.format(volume)))
# Remove from wishlist if it exists
try:
user_wish = UserWishlistVolume.objects.get(
volume=volume, user=request.user)
user_wish.delete()
except UserWishlistVolume.DoesNotExist:
pass
context = RequestContext(request, {'volume': volume})
if context.get('is_pjax'):
return render_to_response(self.template, context_instance=context)
else:
return HttpResponseRedirect(
reverse('series.detail', args=[volume.series.pk])
)

View File

@ -45,7 +45,7 @@
{% endif %}
<div class="row">
{% for volume in item.volumes.all %}
<div class="col-sm-3">
<div class="col-sm-3" data-pjax-container="v{{ volume.pk }}">
{% include "manga/series/includes/volume.html" with volume=volume user=user %}
</div>
{% if forloop.counter|divisibleby:4 %}

View File

@ -2,18 +2,22 @@
<div class="well text-center volume-item">
<div class="badges {% if volume in user.have_volumes %}user-have-it{% endif %}">
{% if volume in user.have_volumes %}
<span class="badge">
<i class="glyphicon glyphicon-ok"></i>
</span>
<a href="{% url "volume.have_it" volume.pk %}" data-pjax="v{{ volume.pk }}" pjax-nopush pjax-messages>
<span class="badge badge-success">
<i class="glyphicon glyphicon-ok"></i>
</span>
</a>
{% else %}
<a href="#">
<a href="{% url "volume.have_it" volume.pk %}" data-pjax="v{{ volume.pk }}" pjax-nopush pjax-messages>
<span class="badge">
<i class="glyphicon glyphicon-ok"></i>
</span>
</a>
<span class="badge {% if volime in user.whislisted_volumes %}badge-warning{% endif %}">
<i class="glyphicon glyphicon-star"></i>
</span>
<a href="{% url "volume.wishlist" volume.pk %}" data-pjax="v{{ volume.pk }}" pjax-messages pjax-nopush>
<span class="badge {% if volime in user.whislisted_volumes %}badge-warning{% endif %}">
<i class="glyphicon glyphicon-star"></i>
</span>
</a>
{% endif %}
</div>
<div class="text-center">

View File

@ -0,0 +1,5 @@
{% extends "_pjax.html" %}
{% block main_content %}
{% include "manga/series/includes/volume.html" %}
{% endblock %}

View File

@ -12,6 +12,7 @@ urlpatterns = patterns(
url(r'^', include('shelfzilla.apps.landing.urls')),
url(r'^', include('shelfzilla.apps.users.urls')),
url(r'^series/', include('shelfzilla.apps.manga.urls.series')),
url(r'^volumes/', include('shelfzilla.apps.manga.urls.volumes')),
url(r'^$', include('shelfzilla.apps.homepage.urls')),
url(r'^admin/', include(admin.site.urls)),
)