summaryrefslogtreecommitdiff
path: root/internal/api/model
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2024-07-12 20:36:03 +0200
committerLibravatar GitHub <noreply@github.com>2024-07-12 20:36:03 +0200
commitaeb65bceae97611b8931de2e954df18afedd812f (patch)
tree74e6f7ecb86c8affcfef99994cbf21d9133a2b56 /internal/api/model
parent[feature] support processing of (many) more media types (#3090) (diff)
downloadgotosocial-aeb65bceae97611b8931de2e954df18afedd812f.tar.xz
[feature/frontend] Better visual separation between "main" thread and "replies" (#3093)
* [feature/frontend] Better web threading model * fix test * bwap * tweaks * more tweaks to wording * typo * indenting * adjust wording * aaa
Diffstat (limited to 'internal/api/model')
-rw-r--r--internal/api/model/status.go36
-rw-r--r--internal/api/model/statuscontext.go (renamed from internal/api/model/context.go)42
2 files changed, 60 insertions, 18 deletions
diff --git a/internal/api/model/status.go b/internal/api/model/status.go
index 0d925d211..00be868f1 100644
--- a/internal/api/model/status.go
+++ b/internal/api/model/status.go
@@ -102,28 +102,34 @@ type Status struct {
Text string `json:"text,omitempty"`
// A list of filters that matched this status and why they matched, if there are any such filters.
Filtered []FilterResult `json:"filtered,omitempty"`
+}
- // Additional fields not exposed via JSON
- // (used only internally for templating etc).
+// WebStatus is like *model.Status, but contains
+// additional fields used only for HTML templating.
+//
+// swagger:ignore
+type WebStatus struct {
+ *Status
- // Template-ready language tag + string, based
- // on *status.Language. Nil for non-web statuses.
- //
- // swagger:ignore
- LanguageTag *language.Language `json:"-"`
+ // Template-ready language tag and
+ // string, based on *status.Language.
+ LanguageTag *language.Language
// Template-ready poll options with vote shares
// calculated as a percentage of total votes.
- // Nil for non-web statuses.
- //
- // swagger:ignore
- WebPollOptions []WebPollOption `json:"-"`
+ PollOptions []WebPollOption
// Status is from a local account.
- // Always false for non-web statuses.
- //
- // swagger:ignore
- Local bool `json:"-"`
+ Local bool
+
+ // Level of indentation at which to
+ // display this status in the web view.
+ Indent int
+
+ // This status is the first status after
+ // the "main" thread, so it and everything
+ // below it can be considered "replies".
+ ThreadFirstReply bool
}
/*
diff --git a/internal/api/model/context.go b/internal/api/model/statuscontext.go
index 69bbc6345..205672dc8 100644
--- a/internal/api/model/context.go
+++ b/internal/api/model/statuscontext.go
@@ -17,12 +17,48 @@
package model
-// Context models the tree around a given status.
+// ThreadContext models the tree or
+// "thread" around a given status.
//
-// swagger:model statusContext
-type Context struct {
+// swagger:model threadContext
+type ThreadContext struct {
// Parents in the thread.
Ancestors []Status `json:"ancestors"`
// Children in the thread.
Descendants []Status `json:"descendants"`
}
+
+type WebThreadContext struct {
+ // Parents in the thread.
+ Ancestors []*WebStatus `json:"ancestors"`
+
+ // Children in the thread.
+ Descendants []*WebStatus `json:"descendants"`
+
+ // The status around which the ancestors
+ // + descendants context was constructed.
+ Status *WebStatus `json:"-"`
+
+ // Total length of
+ // the main thread.
+ ThreadLength int
+
+ // Number of entries in
+ // the main thread shown.
+ ThreadShown int
+
+ // Number of statuses hidden
+ // from the main thread (not
+ // visible to requester etc).
+ ThreadHidden int
+
+ // Total number of replies
+ // in the replies section.
+ ThreadReplies int
+
+ // Number of replies shown.
+ ThreadRepliesShown int
+
+ // Number of replies hidden.
+ ThreadRepliesHidden int
+}