syncable_fields = ['order', 'deleted', 'book', 'fragment', 'quote', 'bookmark', 'note']
+ objects = ActiveManager()
+ all_objects = models.Manager()
+
@classmethod
def create_from_data(cls, user, data):
if data.get('favorites'):
@login_required
def my_shelf(request):
template_name = 'social/my_shelf.html'
- favs = request.user.userlist_set.filter(favorites=True)
- others = request.user.userlist_set.filter(favorites=False)
- ulists = list(request.user.userlist_set.all())
+ favs = request.user.userlist_set.filter(deleted=False, favorites=True)
+ others = request.user.userlist_set.filter(deleted=False, favorites=False)
+ ulists = list(request.user.userlist_set.filter(deleted=False))
suggest = [t for t in ulists if t.name]
return render(request, template_name, {
data = {}
tagged = models.UserListItem.objects.filter(
list__user=user,
- book_id__in=book_ids
+ book_id__in=book_ids,
+ deleted=False,
+ list__deleted=False
).order_by('list__name')
for t in tagged:
item = data.setdefault(t.book_id, [])
- if t.list.name:
- item.append({
- "slug": t.list.slug,
- "url": t.list.get_absolute_url(),
- "name": t.list.name,
- })
+ item.append({
+ "slug": t.list.slug,
+ "url": t.list.get_absolute_url(),
+ "name": t.list.name,
+ "favorites": t.list.favorites,
+ })
for b in book_ids:
if b not in data:
data[b] = None
data: {'csrfmiddlewaretoken': $('[name=csrfmiddlewaretoken]').val()},
dataType: 'json',
success: function() {
- state.liked[$btn.attr('data-book')] = [];
+ state.liked[$btn.attr('data-book')] = [{'favorites': true}];
updateLiked($btn);
},
error: function() {
function updateLiked(e) {
let bookId = $(e).attr('data-book');
- let liked = bookId in state.liked;
- $(e).toggleClass('icon-liked', liked);
+ let liked = false;
+
let $bookContainer = $('.book-container-' + bookId);
- $bookContainer.toggleClass('book-liked', liked);
let $sets = $(".sets", $bookContainer);
$sets.empty();
$.each(state.liked[bookId], (i,e) => {
- let $set = $("<span>");
- $set.attr("data-set", e.slug);
- let $setA = $("<a>").appendTo($set);
- $setA.attr("href", e.url);
- $setA.text(e.name);
- let $setX = $("<a class='close'></a>").appendTo($set);
- $sets.append($set);
+ if (e.favorites) {
+ liked = true;
+ } else {
+ let $set = $("<span>");
+ $set.attr("data-set", e.slug);
+ let $setA = $("<a>").appendTo($set);
+ $setA.attr("href", e.url);
+ $setA.text(e.name);
+ let $setX = $("<a class='close'></a>").appendTo($set);
+ $sets.append($set);
+ }
});
+
+ $(e).toggleClass('icon-liked', liked);
+ $bookContainer.toggleClass('book-liked', liked);
}
})();