mirror of
https://github.com/sissbruecker/linkding.git
synced 2025-08-07 18:58:30 +02:00
98 lines
3.4 KiB
Python
98 lines
3.4 KiB
Python
from django.contrib import messages
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.http import HttpRequest, HttpResponseRedirect
|
|
from django.shortcuts import render
|
|
from django.urls import reverse
|
|
|
|
from bookmarks.models import BookmarkBundle, BookmarkBundleForm, BookmarkSearch
|
|
from bookmarks.services import bundles
|
|
from bookmarks.views import access
|
|
from bookmarks.views.contexts import ActiveBookmarkListContext
|
|
|
|
|
|
@login_required
|
|
def index(request: HttpRequest):
|
|
bundles = BookmarkBundle.objects.filter(owner=request.user).order_by("order")
|
|
context = {"bundles": bundles}
|
|
return render(request, "bundles/index.html", context)
|
|
|
|
|
|
@login_required
|
|
def action(request: HttpRequest):
|
|
if "remove_bundle" in request.POST:
|
|
remove_bundle_id = request.POST.get("remove_bundle")
|
|
bundle = access.bundle_write(request, remove_bundle_id)
|
|
bundle_name = bundle.name
|
|
bundles.delete_bundle(bundle)
|
|
messages.success(request, f"Bundle '{bundle_name}' removed successfully.")
|
|
|
|
elif "move_bundle" in request.POST:
|
|
bundle_id = request.POST.get("move_bundle")
|
|
bundle_to_move = access.bundle_write(request, bundle_id)
|
|
move_position = int(request.POST.get("move_position"))
|
|
bundles.move_bundle(bundle_to_move, move_position)
|
|
|
|
return HttpResponseRedirect(reverse("linkding:bundles.index"))
|
|
|
|
|
|
def _handle_edit(request: HttpRequest, template: str, bundle: BookmarkBundle = None):
|
|
form_data = request.POST if request.method == "POST" else None
|
|
form = BookmarkBundleForm(form_data, instance=bundle)
|
|
|
|
if request.method == "POST":
|
|
if form.is_valid():
|
|
instance = form.save(commit=False)
|
|
|
|
if bundle is None:
|
|
instance.order = None
|
|
bundles.create_bundle(instance, request.user)
|
|
else:
|
|
instance.save()
|
|
|
|
messages.success(request, "Bundle saved successfully.")
|
|
return HttpResponseRedirect(reverse("linkding:bundles.index"))
|
|
|
|
status = 422 if request.method == "POST" and not form.is_valid() else 200
|
|
bookmark_list = _get_bookmark_list_preview(request, bundle)
|
|
context = {"form": form, "bundle": bundle, "bookmark_list": bookmark_list}
|
|
|
|
return render(request, template, context, status=status)
|
|
|
|
|
|
@login_required
|
|
def new(request: HttpRequest):
|
|
return _handle_edit(request, "bundles/new.html")
|
|
|
|
|
|
@login_required
|
|
def edit(request: HttpRequest, bundle_id: int):
|
|
bundle = access.bundle_write(request, bundle_id)
|
|
|
|
return _handle_edit(request, "bundles/edit.html", bundle)
|
|
|
|
|
|
@login_required
|
|
def preview(request: HttpRequest):
|
|
bookmark_list = _get_bookmark_list_preview(request)
|
|
context = {"bookmark_list": bookmark_list}
|
|
return render(request, "bundles/preview.html", context)
|
|
|
|
|
|
def _get_bookmark_list_preview(
|
|
request: HttpRequest, bundle: BookmarkBundle | None = None
|
|
):
|
|
if request.method == "GET" and bundle:
|
|
preview_bundle = bundle
|
|
else:
|
|
form_data = (
|
|
request.POST.copy() if request.method == "POST" else request.GET.copy()
|
|
)
|
|
form_data["name"] = "Preview Bundle" # Set dummy name for form validation
|
|
form = BookmarkBundleForm(form_data)
|
|
preview_bundle = form.save(commit=False)
|
|
|
|
search = BookmarkSearch(bundle=preview_bundle)
|
|
bookmark_list = ActiveBookmarkListContext(request, search)
|
|
bookmark_list.is_preview = True
|
|
return bookmark_list
|