Add continuous collection reading view

This commit is contained in:
rucki
2026-08-27 16:14:10 +02:00
parent cd97a6cb62
commit 31d1828adb
7 changed files with 143 additions and 69 deletions
+20 -9
View File
@@ -692,29 +692,40 @@ def collection_edit(request, pk):
def collection_detail(request, pk):
collection = get_object_or_404(visible_collections(request.user), pk=pk)
return render(request, 'core/collection_detail.html', {
'collection': collection,
'sections': collection.sections.select_related('item').prefetch_related('item__tags', 'item__attachments'),
'can_edit': user_can_edit_collection(request.user, collection),
})
@login_required
def collection_manage(request, pk):
collection = get_object_or_404(visible_collections(request.user), pk=pk)
if not user_can_edit_collection(request.user, collection):
return JsonResponse({'error': 'forbidden'}, status=403)
manage_url = reverse('collection_manage', args=[collection.pk])
if request.method == 'POST':
if not user_can_edit_collection(request.user, collection):
return JsonResponse({'error': 'forbidden'}, status=403)
action = request.POST.get('action')
if action in {'add', 'confirm_add'}:
item = get_object_or_404(visible_items(request.user), pk=request.POST.get('item_id'), kind=Item.Kind.NOTE)
if collection_item_is_compatible(collection, item):
add_collection_section(collection, item)
return redirect(collection)
return redirect(manage_url)
if action == 'add':
return render(request, 'core/collection_detail.html', collection_detail_context(request, collection, item))
return render(request, 'core/collection_manage.html', collection_detail_context(request, collection, item))
mode = request.POST.get('mode')
if mode == 'convert':
if not item_can_change_for_collection(request.user, item, collection):
messages.error(request, _('This note is used by an incompatible collection or cannot be edited. Create a copy instead.'))
return redirect(collection)
return redirect(manage_url)
item = adapt_item_for_collection(item, collection)
elif mode == 'copy':
item = copy_item_for_collection(item, collection, request.user)
else:
return redirect(collection)
return redirect(manage_url)
add_collection_section(collection, item)
return redirect(collection)
return redirect(manage_url)
section = get_object_or_404(CollectionSection, pk=request.POST.get('section_id'), collection=collection)
if action == 'remove':
section.delete()
@@ -733,8 +744,8 @@ def collection_detail(request, pk):
CollectionSection.objects.filter(pk=section.pk).update(position=temporary)
CollectionSection.objects.filter(pk=other.pk).update(position=section.position)
CollectionSection.objects.filter(pk=section.pk).update(position=other.position)
return redirect(collection)
return render(request, 'core/collection_detail.html', collection_detail_context(request, collection))
return redirect(manage_url)
return render(request, 'core/collection_manage.html', collection_detail_context(request, collection))
@login_required