Fix likes showing on site master
authorRadek Czajka <rczajka@rczajka.pl>
Tue, 17 Feb 2026 15:49:22 +0000 (16:49 +0100)
committerRadek Czajka <rczajka@rczajka.pl>
Tue, 17 Feb 2026 15:49:22 +0000 (16:49 +0100)
src/social/models.py
src/social/views.py
src/wolnelektury/static/js/main.js

index 89fa65c..c8d0d10 100644 (file)
@@ -433,6 +433,9 @@ class UserListItem(Syncable, models.Model):
     
     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'):
index df944b3..f2d53d4 100644 (file)
@@ -68,9 +68,9 @@ def unlike_book(request, slug):
 @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, {
@@ -84,16 +84,18 @@ def get_sets_for_book_ids(book_ids, user):
     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
index 9821c77..666d7a0 100644 (file)
                 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);
     }
     
 })();