abstract status from thread to avoid copy-pasting

This commit is contained in:
f0x 2021-09-10 23:37:38 +02:00
commit 5977781f17
4 changed files with 49 additions and 102 deletions

View file

@ -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)

View file

@ -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,

View file

@ -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
View 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" .}}