summaryrefslogtreecommitdiffstats
path: root/activities/views/posts.py
diff options
context:
space:
mode:
authorAndrew Godwin2022-11-24 15:17:32 -0700
committerAndrew Godwin2022-11-24 15:17:32 -0700
commitec634f2ad382f659eedae884154d0db9a2a006b2 (patch)
tree2a33846e24ab6669e27d3e54b81127a720157479 /activities/views/posts.py
parent4c00e11d63c082b57c1aec8f7c3e58820b56674a (diff)
downloadtakahe-ec634f2ad382f659eedae884154d0db9a2a006b2.tar.gz
takahe-ec634f2ad382f659eedae884154d0db9a2a006b2.tar.bz2
takahe-ec634f2ad382f659eedae884154d0db9a2a006b2.zip
Initial reply-to feature
Diffstat (limited to 'activities/views/posts.py')
-rw-r--r--activities/views/posts.py32
1 files changed, 28 insertions, 4 deletions
diff --git a/activities/views/posts.py b/activities/views/posts.py
index fce17e3..a53d401 100644
--- a/activities/views/posts.py
+++ b/activities/views/posts.py
@@ -143,6 +143,7 @@ class Compose(FormView):
),
help_text="Optional - Post will be hidden behind this text until clicked",
)
+ reply_to = forms.CharField(widget=forms.HiddenInput(), required=False)
def clean_text(self):
text = self.cleaned_data.get("text")
@@ -155,10 +156,13 @@ class Compose(FormView):
)
return text
- def get_form_class(self):
- form = super().get_form_class()
- form.declared_fields["text"]
- return form
+ def get_initial(self):
+ initial = super().get_initial()
+ if self.reply_to:
+ initial["reply_to"] = self.reply_to.pk
+ initial["visibility"] = Post.Visibilities.unlisted
+ initial["text"] = f"@{self.reply_to.author.handle} "
+ return initial
def form_valid(self, form):
post = Post.create_local(
@@ -166,7 +170,27 @@ class Compose(FormView):
content=form.cleaned_data["text"],
summary=form.cleaned_data.get("content_warning"),
visibility=form.cleaned_data["visibility"],
+ reply_to=self.reply_to,
)
# Add their own timeline event for immediate visibility
TimelineEvent.add_post(self.request.identity, post)
return redirect("/")
+
+ def dispatch(self, request, *args, **kwargs):
+ # Grab the reply-to post info now
+ self.reply_to = None
+ reply_to_id = self.request.POST.get("reply_to") or self.request.GET.get(
+ "reply_to"
+ )
+ if reply_to_id:
+ try:
+ self.reply_to = Post.objects.get(pk=reply_to_id)
+ except Post.DoesNotExist:
+ pass
+ # Keep going with normal rendering
+ return super().dispatch(request, *args, **kwargs)
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ context["reply_to"] = self.reply_to
+ return context