mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-12-29 18:06:15 -06:00
abstract status from thread to avoid copy-pasting
This commit is contained in:
parent
c5917392c3
commit
5977781f17
4 changed files with 49 additions and 102 deletions
|
|
@ -97,7 +97,7 @@ func (m *Module) Route(s router.Router) error {
|
|||
s.AttachHandler(http.MethodGet, "/", m.baseHandler)
|
||||
|
||||
// serve statuses
|
||||
s.AttachHandler(http.MethodGet, "/:user/statuses/:id", m.statusTemplateHandler)
|
||||
s.AttachHandler(http.MethodGet, "/:user/statuses/:id", m.threadTemplateHandler)
|
||||
|
||||
// 404 handler
|
||||
s.AttachNoRouteHandler(m.NotFoundHandler)
|
||||
|
|
|
|||
|
|
@ -30,9 +30,9 @@ type StatusLink struct {
|
|||
ID string `uri:"id" binding:"required"`
|
||||
}
|
||||
|
||||
func (m *Module) statusTemplateHandler(c *gin.Context) {
|
||||
l := m.log.WithField("func", "statusTemplateGET")
|
||||
l.Trace("rendering status template")
|
||||
func (m *Module) threadTemplateHandler(c *gin.Context) {
|
||||
l := m.log.WithField("func", "threadTemplateGET")
|
||||
l.Trace("rendering thread template")
|
||||
|
||||
var statusLink StatusLink
|
||||
|
||||
|
|
@ -73,7 +73,7 @@ func (m *Module) statusTemplateHandler(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
c.HTML(http.StatusOK, "status.tmpl", gin.H{
|
||||
c.HTML(http.StatusOK, "thread.tmpl", gin.H{
|
||||
"instance": instance,
|
||||
"status": status,
|
||||
"context": context,
|
||||
|
|
@ -1,100 +1,28 @@
|
|||
{{ template "header.tmpl" .}}
|
||||
<main>
|
||||
<div class="thread">
|
||||
{{range .context.Ancestors}}
|
||||
<div class="toot">
|
||||
<a href="{{.Account.URL}}" class="avatar"><img src="{{.Account.Avatar}}"></a>
|
||||
<a href="{{.Account.URL}}" class="displayname">{{.Account.DisplayName}}</a>
|
||||
<a href="{{.Account.URL}}" class="username">@{{.Account.Username}}</a>
|
||||
<div class="text">
|
||||
{{.Content |noescape}}
|
||||
</div>
|
||||
{{with .MediaAttachments}}
|
||||
<div class="media {{(len .) | oddOrEven }}{{if eq (len .) 1}} single{{end}}{{if eq (len .) 2}} double{{end}}">
|
||||
{{range .}}
|
||||
<a href="{{.URL}}" target="_blank" title="{{.Description}}">
|
||||
{{if not .Description}}
|
||||
<div class="no-image-desc" aria-hidden="true" >(!)<span>Missing image description</span></div>
|
||||
{{end}}
|
||||
<img src="{{.PreviewURL}}" alt="{{.Description}}"/>
|
||||
</a>
|
||||
{{end}}
|
||||
</div>
|
||||
<a href="{{.Account.URL}}" class="avatar"><img src="{{.Account.Avatar}}"></a>
|
||||
<a href="{{.Account.URL}}" class="displayname">{{.Account.DisplayName}}</a>
|
||||
<a href="{{.Account.URL}}" class="username">@{{.Account.Username}}</a>
|
||||
<div class="text">
|
||||
{{.Content |noescape}}
|
||||
</div>
|
||||
{{with .MediaAttachments}}
|
||||
<div class="media {{(len .) | oddOrEven }}{{if eq (len .) 1}} single{{end}}{{if eq (len .) 2}} double{{end}}">
|
||||
{{range .}}
|
||||
<a href="{{.URL}}" target="_blank" title="{{.Description}}">
|
||||
{{if not .Description}}
|
||||
<div class="no-image-desc" aria-hidden="true" >(!)<span>Missing image description</span></div>
|
||||
{{end}}
|
||||
<div class="info">
|
||||
<div id="date">{{.CreatedAt | timestamp}}</div>
|
||||
<div class="stats">
|
||||
<div id="visibility">{{.Visibility | visibilityIcon}}</div>
|
||||
<div id="replies"><i aria-label="Replies" class="fa fa-reply-all"></i> {{.RepliesCount}}</div>
|
||||
<div id="boosts"><i aria-label="Boosts" class="fa fa-retweet"></i> {{.ReblogsCount}}</div>
|
||||
<div id="favorites"><i aria-label="Favorites" class="fa fa-star"></i> {{.FavouritesCount}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{{.URL}}" class="toot-link">View toot</a>
|
||||
</div>
|
||||
{{end}}
|
||||
<div class="toot expanded">
|
||||
<a href="{{.status.Account.URL}}" class="avatar"><img src="{{.status.Account.Avatar}}"></a>
|
||||
<a href="{{.status.Account.URL}}" class="displayname">{{.status.Account.DisplayName}}</a>
|
||||
<a href="{{.status.Account.URL}}" class="username">@{{.status.Account.Username}}</a>
|
||||
<div class="text">
|
||||
{{.status.Content |noescape}}
|
||||
</div>
|
||||
{{with .status.MediaAttachments}}
|
||||
<div class="media {{(len .) | oddOrEven }} {{if eq (len .) 1}}single{{end}}">
|
||||
{{range .}}
|
||||
<a href="{{.URL}}" target="_blank" title="{{.Description}}">
|
||||
{{if not .Description}}
|
||||
<div class="no-image-desc" aria-hidden="true" >(!)<span>Missing image description</span></div>
|
||||
{{end}}
|
||||
<img src="{{.PreviewURL}}" alt="{{.Description}}"/>
|
||||
</a>
|
||||
{{end}}
|
||||
</div>
|
||||
{{end}}
|
||||
<div class="info">
|
||||
<div id="date">{{.status.CreatedAt | timestamp}}</div>
|
||||
<div class="stats">
|
||||
<div id="visibility">{{.status.Visibility | visibilityIcon}}</div>
|
||||
<div id="replies"><i aria-label="Replies" class="fa fa-reply-all"></i> {{.status.RepliesCount}}</div>
|
||||
<div id="boosts"><i aria-label="Boosts" class="fa fa-retweet"></i> {{.status.ReblogsCount}}</div>
|
||||
<div id="favorites"><i aria-label="Favorites" class="fa fa-star"></i> {{.status.FavouritesCount}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{{.status.URL}}" class="toot-link">View toot</a>
|
||||
</div>
|
||||
{{range .context.Descendants}}
|
||||
<div class="toot">
|
||||
<a href="{{.Account.URL}}" class="avatar"><img src="{{.Account.Avatar}}"></a>
|
||||
<a href="{{.Account.URL}}" class="displayname">{{.Account.DisplayName}}</a>
|
||||
<a href="{{.Account.URL}}" class="username">@{{.Account.Username}}</a>
|
||||
<div class="text">
|
||||
{{.Content |noescape}}
|
||||
</div>
|
||||
{{with .MediaAttachments}}
|
||||
<div class="media {{(len .) | oddOrEven }} {{if eq (len .) 1}}single{{end}}">
|
||||
{{range .}}
|
||||
<a href="{{.URL}}" target="_blank" title="{{.Description}}">
|
||||
{{if not .Description}}
|
||||
<div class="no-image-desc" aria-hidden="true" >(!)<span>Missing image description</span></div>
|
||||
{{end}}
|
||||
<img src="{{.PreviewURL}}" alt="{{.Description}}"/>
|
||||
</a>
|
||||
{{end}}
|
||||
</div>
|
||||
{{end}}
|
||||
<div class="info">
|
||||
<div id="date">{{.CreatedAt | timestamp}}</div>
|
||||
<div class="stats">
|
||||
<div id="visibility">{{.Visibility | visibilityIcon}}</div>
|
||||
<div id="replies"><i aria-label="Replies" class="fa fa-reply-all"></i> {{.RepliesCount}}</div>
|
||||
<div id="boosts"><i aria-label="Boosts" class="fa fa-retweet"></i> {{.ReblogsCount}}</div>
|
||||
<div id="favorites"><i aria-label="Favorites" class="fa fa-star"></i> {{.FavouritesCount}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{{.URL}}" class="toot-link">View toot</a>
|
||||
</div>
|
||||
<img src="{{.PreviewURL}}" alt="{{.Description}}"/>
|
||||
</a>
|
||||
{{end}}
|
||||
</div>
|
||||
</main>
|
||||
{{ template "footer.tmpl" .}}
|
||||
{{end}}
|
||||
<div class="info">
|
||||
<div id="date">{{.CreatedAt | timestamp}}</div>
|
||||
<div class="stats">
|
||||
<div id="visibility">{{.Visibility | visibilityIcon}}</div>
|
||||
<div id="replies"><i aria-label="Replies" class="fa fa-reply-all"></i> {{.RepliesCount}}</div>
|
||||
<div id="boosts"><i aria-label="Boosts" class="fa fa-retweet"></i> {{.ReblogsCount}}</div>
|
||||
<div id="favorites"><i aria-label="Favorites" class="fa fa-star"></i> {{.FavouritesCount}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{{.URL}}" class="toot-link">View toot</a>
|
||||
19
web/template/thread.tmpl
Normal file
19
web/template/thread.tmpl
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{{ template "header.tmpl" .}}
|
||||
<main>
|
||||
<div class="thread">
|
||||
{{range .context.Ancestors}}
|
||||
<div class="toot">
|
||||
{{ template "status.tmpl" .}}
|
||||
</div>
|
||||
{{end}}
|
||||
<div class="toot expanded">
|
||||
{{ template "status.tmpl" .status}}
|
||||
</div>
|
||||
{{range .context.Descendants}}
|
||||
<div class="toot">
|
||||
{{ template "status.tmpl" .}}
|
||||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
</main>
|
||||
{{ template "footer.tmpl" .}}
|
||||
Loading…
Add table
Add a link
Reference in a new issue