Added pjax and fallback calls for the "I have it" and "Wishlist this" volume
This commit is contained in:
parent
2f6e671c95
commit
28fe1f5ce6
|
@ -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
|
||||
)
|
||||
)
|
||||
|
|
|
@ -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'),
|
||||
)
|
|
@ -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])
|
||||
)
|
|
@ -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 %}
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
{% extends "_pjax.html" %}
|
||||
|
||||
{% block main_content %}
|
||||
{% include "manga/series/includes/volume.html" %}
|
||||
{% endblock %}
|
|
@ -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)),
|
||||
)
|
||||
|
|
Reference in New Issue